Тема 22. Программирование – циклы, условия
22.01 Многопроцессорные системы
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование – циклы, условия
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#56483

В файле содержится информация о совокупности N  вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B  зависит от процесса A  , если для выполнения процесса B  необходимы результаты выполнения процесса A  . В этом случае процессы могут выполняться только последовательно.

Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID )  , во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;  » ID  процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0  .

Типовой пример организации данных в файле:

|--------------|--------------------------------|----------------|
-ID-процесса B--Время-выполн-ени-я процесса B-(мс)-ID-процесса(ов)A-
|      1       |               4                |       0        |
|--------------|--------------------------------|----------------|
|------2-------|---------------3----------------|-------0--------|
-------3-----------------------1-----------------------1;2--------
|      4       |               7                |       3        |
------------------------------------------------------------------

Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.

Вложения к задаче
Показать ответ и решение
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)

Ответ: 34

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!