Menu
CoddyTech

Network Delay Time

Сеть содержит n узлов с метками от 1 до n. Связи заданы списком times, где times[i] = [u, v, w] означает, что сигнал, отправленный из узла u, достигает узла v через w единиц времени. Связи работают только в одном направлении.

Сигнал выходит из узла k в момент времени 0 и проходит по всем доступным ему связям. Верните время, когда его получит последний узел, или -1, если какой-либо узел его так и не получит.

Функция

networkDelayTime(times: integer-2d-array, n: integer, k: integer) → integer
timesinteger-2d-array
ориентированные рёбра, каждое в виде [u, v, w]
ninteger
количество узлов
kinteger
узел, который отправляет сигнал
Возвращаетinteger
время, когда последний узел получает сигнал, или -1

Ограничения

  • 2 ≤ n ≤ 3000
  • 1 ≤ times.length ≤ 4000
  • times[i].length = 3
  • 1 ≤ u, v ≤ n и u ≠ v
  • 0 ≤ w ≤ 100
  • Нет двух ссылок, у которых совпадают и u, и v.
  • 1 ≤ k ≤ n

Примеры

Ввод
times = [[1, 2, 4], [1, 3, 1], [3, 2, 2], [2, 4, 1]]n = 4k = 1
Вывод
4
Пояснение
Узел 3 получает сигнал в момент времени 1. Узел 2 мог бы получить его в момент времени 4 по прямому каналу, но по маршруту через узел 3 сигнал поступает в момент 1 + 2 = 3, а узел 4 получает его в момент 3 + 1 = 4. Последним сигнал получает узел 4, в момент времени 4.

lock icon+16 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Предположим, сигнал затухает после прохождения m звеньев. Как найти время, когда последний узел услышит его при таком ограничении?

Сбросить код
def networkDelayTime(times, n, k):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

times = [[1, 2, 4], [1, 3, 1], [3, 2, 2], [2, 4, 1]]
n = 4
k = 1

Ожидается

4