Ctrl K

Самая длинная петля переходов

Сложная
В сети n узлов с номерами от 0 до n - 1, и из каждого узла ведёт не больше одного направленного перехода. Переходы заданы массивом next_hop длины n: из узла i можно перейти в узел next_hop[i], а next_hop[i] == -1 означает, что перехода из i нет. **Петля** — это путь по переходам, который возвращается в свой начальный узел. Верните число узлов в самой длинной петле или -1, если петель нет.
Пример 1
next_hop=[1, 2, 0, 2, -1] → 3

Петля 0 → 1 → 2 → 0 из трёх узлов. Узел 3 ведёт в неё, но сам в петлю не входит, а из узла 4 переходов нет.

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

Переходы 2 → 1 → 0 обрываются на узле 0 — петель нет, ответ -1.

Пример 3
next_hop=[1, 0, 3, 4, 5, 2] → 4

Две петли: 0 ⇄ 1 длины 2 и 2 → 3 → 4 → 5 → 2 длины 4. Самая длинная — 4.

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

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