Ctrl K

Карантин для сломанной функции

Средняя
В проекте n функций с номерами от 0 до n - 1. Пара [a, b] из списка calls означает, что функция a вызывает функцию b. В функции faulty нашли ошибку. Подозрительными считаются сама faulty и все функции, до которых она может дойти по цепочке вызовов. Их хотят удалить из проекта целиком. Но удалять группу можно только если ни одна функция вне её не вызывает ни одну функцию из группы — иначе проект сломается. В таком случае не удаляют ничего. Верните номера функций, которые останутся в проекте, в любом порядке.
Пример 1
n=5, faulty=1, calls=[[0, 1], [1, 2], [2, 3], [4, 0]] → [0, 1, 2, 3, 4]

Под подозрением 1, 2 и 3 (их вызывает 1 напрямую или через 2). Но функция 0 не подозрительна и вызывает 1, поэтому удалить группу нельзя — остаются все.

Пример 2
n=6, faulty=2, calls=[[2, 3], [3, 4], [0, 1], [1, 5]] → [0, 1, 5]

Подозрительны 2, 3 и 4, и снаружи их никто не вызывает. Их удаляют, остаются 0, 1 и 5.

Пример 3
n=2, faulty=0, calls=[[1, 0]] → [0, 1]
Ограничения
  • 1 ≤ n ≤ 10⁵
  • 0 ≤ faulty < n
  • 0 ≤ len(calls) ≤ 2·10⁵
  • calls[i] = [a, b], 0 ≤ a, b < n, a ≠ b
  • Все пары в calls различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПорядок сборки модулей СредняяОчередь на курсы СредняяСкладываются ли связи в дерево СредняяЛучшие корни дерева СредняяСколько изолированных групп в сети Средняя
загружаем Python…
Вход
n=5, faulty=1, calls=[[0, 1], [1, 2], [2, 3], [4, 0]]
Ожидается
[0, 1, 2, 3, 4]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 79 тестов на сервере, включая скрытые.