Задача №1928. Производство деталей
Разбор добавил Иван Арбузов
Это смешная задача на обход в глубину. И лучше всего реализовывать рекурсивный обход, так как меньше проблем с кодом. Переведем задачу на язык графов: имеется граф, необходимо выделить в нем дерево, включающее вершину (деталь) с номером 1. Для этого надо запустить dfs от первой вершины и запоминать все посещаемые вершины в стеке (параллельно считая сумму времен и их количество). После этого отвечаем на вопрос задачи. Тут важно понять, что существует единственное время выполнения первой детали, так как условие обязательности не дает нам права исключать из его "списка подчиненных" другие детали. Так же очевидно, что лишние детали никто делать не будет (что выдно из сэмплов). Так что выделения дерева с корнем в вершине 1 и нахождении суммы времен всех вершин в него входящих и есть решение задачи. Стоит отметить ряд особенностей: 1) ограничения на входные данные говорят о том, что время надо хранить в long long (C++) или _int64 (Pascal); 2) ограничения на память позволяет хранить граф только массивом списков смежных вершин.Сдать: для сдачи задач необходимо войти в систему
3018
statement