Ctrl K

Пути, которые всегда заканчиваются

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

Из 0 путь 0 → 1 → 2 обрывается в тупике 2. Из 3 можно уйти в 4 и вернуться в 3 — по кругу бесконечно, поэтому 3 и 4 не подходят.

Пример 2
links=[[0], [2], []] → [1, 2]

У экрана 0 есть переход в самого себя, на нём можно крутиться вечно. Экраны 1 и 2 всегда приводят к концу.

Пример 3
links=[[1, 2], [2], [1]] → []
Ограничения
  • 1 ≤ n = len(links) ≤ 10⁴
  • 0 ≤ links[i][j] ≤ n - 1
  • Каждый links[i] строго возрастает (переход в себя возможен)
  • Всего переходов не больше 4·10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПорядок сборки модулей СредняяОчередь на курсы СредняяЛучшие корни дерева СредняяСамый длинный поход по лесу СредняяНужен ли этот шаг раньше Средняя
загружаем Python…
Вход
links=[[1], [2], [], [0, 4], [3]]
Ожидается
[0, 1, 2]

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