有 n
個網路節點,標記為 1
到 n
。
給你一個列表 times
,表示訊號經過 有向 邊的傳遞時間。 times[i] = (ui, vi, wi)
,其中 ui
是源節點,vi
是目標節點, wi
是一個訊號從源節點傳遞到目標節點的時間。
現在,從某個節點 K
發出一個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回 -1
。
class Solution: def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int: g = [[] for _ in range(n)] for x, y, time in times: g[x - 1].append((y - 1, time)) dist = [float('inf')] * n dist[k - 1] = 0 q = [(0, k - 1)] while q: time, x = heapq.heappop(q) if dist[x] < time: # 這裡做了最佳化,如果發現比已有的還要長,實際上就不需要採用這個節點更新圖了 continue for y, time in g[x]: if (d := dist[x] + time) < dist[y]: dist[y] = d heapq.heappush(q, (d, y)) ans = max(dist) return ans if ans < float('inf') else -1