[leetcode] 743. Network Delay Time
2023. 2. 22. 11:14ㆍ노트/Algorithm : 알고리즘
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] = (ui, vi, wi), where ui is the source node, vi is the target node, and wi 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 <= 100
- 1 <= times.length <= 6000
- times[i].length == 3
- 1 <= ui, vi <= n
- ui != vi
- 0 <= wi <= 100
- All the pairs (ui, vi) are unique. (i.e., no multiple edges.)
class Solution(object):
def networkDelayTime(self, times, n, k):
"""
:type times: List[List[int]]
:type n: int
:type k: int
:rtype: int
"""
graph = collections.defaultdict(list)
# 그래프 인접 리스트 구성
for u, v, w in times:
graph[u].append((v,w))
# 큐 변수: [(소요시간, 정점)]
Q = [(0, k)]
dist = collections.defaultdict(int)
while Q:
time, node = heapq.heappop(Q)
if node not in dist:
dist[node] = time
for v,w in graph[node]:
alt = time + w
heapq.heappush(Q, (alt, v))
# 모든 노드의 최단 경로 존재 여부 판별
if len(dist) == n:
return max(dist.values())
return -1
'노트 > Algorithm : 알고리즘' 카테고리의 다른 글
[leetcode] 104. Maximum Depth of Binary Tree (0) | 2023.02.23 |
---|---|
[leetcode] 787. Cheapest Flights Within K Stops (0) | 2023.02.22 |
[leetcode] 207. Course Schedule (0) | 2023.02.21 |
[leetcode] 332. Reconstruct Itinerary (0) | 2023.02.20 |
[leetcode] 78. Subsets (0) | 2023.02.08 |