Ctrl K

Сигнал по дереву

Сложная
Сеть из n узлов с номерами от 0 до n − 1 устроена как дерево: edges[i] = [u, v] означает, что узлы u и v соединены напрямую. Число узлов равно len(edges) + 1. В момент 0 включается один узел, и сигнал расходится по сети. Скорость зависит от номера узла, к которому сигнал приходит: - **нечётный** узел загорается в момент x, если хотя бы один его сосед горел уже в момент x − 1; - **чётный** узел загорается в момент x, если хотя бы один его сосед горел уже в момент x − 2. Для каждого узла i найдите момент, когда загорится вся сеть, если первым включить узел i. Запуски независимы: каждый начинается с полностью выключенной сети. Верните массив этих моментов.
Пример 1
edges=[[0, 1], [1, 2]] → [3, 2, 3]

Из вершины 0: вершина 1 загорается в момент 1, вершина 2 — в 1 + 2 = 3. Из вершины 1: обе соседние чётные вершины загораются в момент 2. Из вершины 2 картина симметрична вершине 0.

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

От 0 к нечётной вершине 1 сигнал идёт 1 единицу времени, а от 1 к чётной вершине 0 — 2.

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

Звезда с центром 0. Из листа 1: центр загорается в момент 2, вершина 3 — в 3, вершина 2 — в 4, поэтому ответ 4.

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

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