Ctrl K

Односторонние дороги и выбор столицы

Сложная
В стране city_count городов с номерами от 0 до city_count - 1 и city_count - 1 односторонних дорог: roads[i] = [a, b] означает дорогу из города a в город b. Если забыть про направления, дороги образуют дерево — между любыми двумя городами ровно один путь. Столицу ещё не выбрали. Из столицы должно быть можно доехать до любого города, двигаясь только по направлению дорог. Чтобы этого добиться, некоторые дороги можно развернуть (сменить направление на противоположное). Для каждого города i посчитайте, сколько дорог минимум нужно развернуть, если столицей станет он. Каждый город рассматривается независимо от остальных. Верните список из city_count чисел.
Пример 1
city_count=4, roads=[[1, 0], [1, 2], [3, 2]] → [2, 1, 2, 1]

Из города 1 по дорогам 1→0 и 1→2 можно попасть в 0 и 2, но в 3 нельзя: дорогу 3→2 придётся развернуть, ответ 1. Из города 3 уже доступны 2, но не 1 — разворачиваем 1→2, тоже 1. Из 0 нужно развернуть 1→0 и 3→2, из 2 — 1→2 и 3→2.

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

Из города 0 все дороги уже ведут наружу. Любому другому городу достаточно развернуть свою дорогу к 0.

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

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