다익스트라 알고리즘을 사용하자!
- arr에 의존 관계를 저장한다.
- time에는 감염되기 까지 걸리는 시간을 저장한다. (default = sys.maxsize)
- queue에 시작점 넣고 시작한다.
- 저장되어있는 감염시간(time[e])과 이전꺼에서 뻗어나가는 감염시간(w+v) 중 작은 것을 저장한다.
- time배열을 순회하며 sys.maxsize가 아닌 max 값과 개수를 구한다.
import sys
import heapq
input = sys.stdin.readline
T = int(input())
for _ in range(T):
n, d, start = map(int, input().split())
arr = [[] for _ in range(n+1)]
time = [sys.maxsize]*(n+1)
time[start] = 0
queue = [[0, start]]
for _ in range(d):
a, b, s = map(int, input().split())
arr[b].append([a, s])
while queue:
w, s = heapq.heappop(queue)
for e, v in arr[s]:
if time[e] > w+v:
time[e] = w+v
heapq.heappush(queue, [w+v, e])
_max = 0
cnt = 0
for i in time:
if i != sys.maxsize:
_max = max(i, _max)
cnt += 1
print(cnt, _max)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 4485] 녹색 옷 입은 애가 젤다지? (python) (0) | 2021.04.19 |
---|---|
[백준 1238] 파티 (python) (0) | 2021.04.19 |
[백준 1446] 지름길 (python) (2) | 2021.04.18 |
[백준 1197] 최소 스패닝 트리 (python) (0) | 2021.04.18 |
[백준 13549] 숨바꼭질 3 (python) (0) | 2021.04.13 |
최근댓글