Network Delay Time
Problem
https://leetcode.com/problems/network-delay-time/
You are given a network of n nodes, labeled from 1 to n. You
are also given times, a list of travel times as directed edges
times[i] = (u:sub:`i`, v:sub:`i`, w:sub:`i`),
where u:sub:`i` is the source node, v:sub:`i` is the
target node, and w:sub:`i` is the time it takes for a signal
to travel from source to target.
We will send a signal from a given node k. Return the minimum
time it takes for all the n nodes to receive the signal. If it
is impossible for all the n nodes to receive the signal, return
-1.
Example 1:

Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
Output: 2
Example 2:
Input: times = [[1,2,1]], n = 2, k = 1
Output: 1
Example 3:
Input: times = [[1,2,1]], n = 2, k = 2
Output: -1
Constraints:
1 <= k <= n <= 1001 <= times.length <= 6000times[i].length == 31 <= u:sub:`i`, v:sub:`i`<= nu:sub:`i`!= v:sub:`i`0 <= w:sub:`i`<= 100All the pairs
(u:sub:`i`, v:sub:`i`)are unique. (i.e., no multiple edges.)
Pattern
Depth-First Search, Breadth-First Search, Graph Theory, Heap (Priority Queue), Shortest Path
Approaches
Code
import heapq
from collections import defaultdict
def networkDelayTime(times: list[list[int]], n: int, k: int) -> int:
graph = defaultdict(list)
for [u, v, time] in times:
graph[u].append((v, time))
dist = {u: float("inf") for u in range(1, n + 1)}
dist[k] = 0
heap = [(0, k)]
while heap:
time, v = heapq.heappop(heap)
for neighbor, w in graph[v]:
next_time = time + w
if next_time < dist[neighbor]:
dist[neighbor] = next_time
heapq.heappush(heap, (next_time, neighbor))
result = max(dist.values())
return result if result < float("inf") else -1
Test
>>> from network_delay_time__dijkstra import networkDelayTime
>>> networkDelayTime([[2,1,1],[2,3,1],[3,4,1]], 4, 2)
2
>>> networkDelayTime([[1,2,1]], 2, 1)
1
>>> networkDelayTime([[1,2,1]], 2, 2)
-1
- network_delay_time__dijkstra.networkDelayTime(times: list[list[int]], n: int, k: int) int