В файле содержится информация о совокупности вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс
зависит от процесса
, если для выполнения процесса
необходимы результаты выполнения процесса
. В этом случае процессы могут выполняться только последовательно.
Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса , во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «
»
процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение
.
Типовой пример организации данных в файле:
Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.
from functools import lru_cache
n = int(input())
time = [0 for i in range(n + 1)]
depends = [[] for i in range(n + 1)]
@lru_cache(None)
def lazy_dp(k):
if depends[k][0] == 0:
return time[k]
else:
m = -1
for i in depends[k]:
m = max(m, lazy_dp(i))
return m + time[k]
for i in range(1, n + 1):
a = list(map(int, input().split()))
time[i] = a[0]
del a[0]
depends[i] = a.copy()
ans = -1
for i in range(1, n + 1):
ans = max(ans, lazy_dp(i))
print(ans)