Ctrl K

Когда сеть затихнет

Средняя
В сети n серверов с номерами от 0 до n - 1. Каждая пара links[i] = [u, v] — двусторонний канал между серверами u и v; по каналу любое число сообщений проходит за одну секунду. Сеть связна. Сервер 0 — главный, остальные — рабочие. В начале секунды 0 каждый рабочий сервер отправляет главному запрос. Сообщения всегда идут по кратчайшему пути. Главный сервер отвечает мгновенно, и ответ идёт обратно тем же путём. Пока ответ не получен, рабочий сервер i повторяет запрос каждые retry[i] секунд: в секунды retry[i], 2 · retry[i], … Проверка происходит в начале каждой секунды; если ответ уже пришёл (в том числе в эту самую секунду), повторов больше не будет. Каждая копия запроса тоже доходит до главного и получает свой ответ. Верните самую раннюю секунду, начиная с которой по сети не движется и никуда не прибывает ни одно сообщение.
Пример 1
links=[[0, 1], [0, 2]], retry=[0, 3, 1] → 4

Оба сервера в одном шаге от главного, ответ возвращается через 2 секунды. Сервер 1 повторил бы запрос в секунду 3, но ответ приходит раньше. Сервер 2 успевает повторить запрос в секунду 1, ответ на повтор приходит в секунду 3, так что тишина наступает с секунды 4.

Пример 2
links=[[0, 1], [1, 2], [2, 3]], retry=[0, 10, 10, 2] → 11

Сервер 3 в трёх шагах от главного: ответ идёт 6 секунд. Он отправляет запрос в секунды 0, 2 и 4, последний ответ приходит в секунду 10, тишина — с секунды 11. Серверы 1 и 2 получают ответы раньше, чем успевают повторить запрос.

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

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