Menu
CoddyTech

Network Delay Time

Sieć ma n węzłów oznaczonych liczbami od 1 do n. Połączenia są podane jako lista times, gdzie times[i] = [u, v, w] oznacza, że sygnał wysłany z węzła u dociera do węzła v po w jednostkach czasu. Połączenia działają tylko w jednym kierunku.

Sygnał opuszcza węzeł k w chwili 0 i rozchodzi się wszystkimi dostępnymi połączeniami. Zwróć czas, po którym otrzyma go ostatni węzeł, lub -1, jeśli jakiś węzeł nigdy go nie otrzyma.

Funkcja

networkDelayTime(times: integer-2d-array, n: integer, k: integer) → integer
timesinteger-2d-array
skierowane krawędzie, każda w postaci [u, v, w]
ninteger
liczba węzłów
kinteger
węzeł, który wysyła sygnał
Zwracainteger
czas, w którym ostatni węzeł otrzymuje sygnał, lub -1

Ograniczenia

  • 2 ≤ n ≤ 3000
  • 1 ≤ times.length ≤ 4000
  • times[i].length = 3
  • 1 ≤ u, v ≤ n i u ≠ v
  • 0 ≤ w ≤ 100
  • Żadne dwa łącza nie mają jednocześnie takiej samej wartości u i takiej samej wartości v.
  • 1 ≤ k ≤ n

Przykłady

Wejście
times = [[1, 2, 4], [1, 3, 1], [3, 2, 2], [2, 4, 1]]n = 4k = 1
Wyjście
4
Wyjaśnienie
Węzeł 3 odbiera sygnał w chwili 1. Węzeł 2 mógłby odebrać go w chwili 4 przez bezpośrednie łącze, ale trasą przez węzeł 3 dociera on w chwili 1 + 2 = 3, a węzeł 4 odbiera go w chwili 3 + 1 = 4. Węzeł 4 odbiera sygnał jako ostatni, w chwili 4.

lock icon+16 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Załóżmy, że sygnał zanika po przejściu przez m łączy. Jak znaleźć czas, w którym ostatni węzeł go usłyszy, przy tym ograniczeniu?

Zresetuj kod
def networkDelayTime(times, n, k):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

4