Ctrl K

Лишняя связь в дереве с корнем

Сложная
Дерево с корнем на n вершинах (номера от 1 до n) хранится как набор направленных связей [u, v]: u — родитель v. У корня родителя нет, у каждой другой вершины ровно один родитель, и из корня можно дойти до любой вершины. В список связей links по ошибке добавили одну лишнюю направленную связь между двумя разными вершинами, которой раньше не было. Теперь связей ровно n. Найдите связь, после удаления которой снова получится дерево с корнем на всех n вершинах. Если таких связей несколько, верните ту, что стоит в links последней.
Пример 1
links=[[2, 3], [1, 2], [3, 1], [2, 4]] → [3, 1]

У каждой вершины есть родитель, значит лишняя связь ведёт в корень и замыкает цикл 1 → 2 → 3 → 1. Убрать можно любую связь цикла; последняя из них в списке — [3, 1], и тогда корень — 1.

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

У вершины 4 два родителя. Убрать можно и [3, 4], и [2, 4] — берём ту, что позже в списке.

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

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