题目:
There are N network nodes, labelled 1 to N.
Given times, a list of travel times as directed edges times[i] = (u, v, w), where u is the source node, v is the target node, and w is the time it takes for a signal to travel from source to target.
Now, we send a signal from a certain node K. How long will it take for all nodes to receive the signal? If it is impossible, return -1.
Note:
N will be in the range [1, 100].
K will be in the range [1, N].
The length of times will be in the range [1, 6000].
All edges times[i] = (u, v, w) will have 1 <= u, v <= N and 1 <= w <= 100.
题解:
def networkDelayTime(self, times, N, K):
“”"
:type times: List[List[int]]
:type N: int
:type K: int
:rtype: int
“”"
q,t,adj=[(0,K)],{},collections.defaultdict(list)
for u,v,w in times:
adj[u].append((v,w))
while q:
time,node=heapq.heappop(q)
if node not in t:
t[node]=time
for nei,w in adj[node]:
heapq.heappush(q,(time+w,nei))
return max(t.values()) if len(t)==N else -1