Контест Senior GCD и OperationQueue обновлено

Задача на Swift: операции с зависимостями и критический путь

Условие

Есть n операций с длительностями и m зависимостей a b: операция a может начаться только после завершения b (как a.addDependency(b)). Параллельность не ограничена, каждая операция стартует, как только готовы все её зависимости.

Выведите две строки: момент завершения всех операций и номер операции, которая завершается последней (при равенстве наименьший номер). Если зависимости образуют цикл, выведите CYCLE (с циклом OperationQueue просто никогда не выполнит эти операции).

Первая строка: n m (1 ≤ n ≤ 10⁴, 0 ≤ m ≤ 10⁴). Вторая: n длительностей от 0 до 1000. Дальше m строк a b (возможны повторы).

Пример

4 3
2 3 1 5
2 1
3 1
4 2
10
4

Как подойти

Топологическая сортировка + самый длинный путь.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме