오랜만에 다익스트라.
visited[cur_node] < time:
continue
잊지말것. 이전 측정값보다 현재값이 더 크면 조사할 필요 없다.
import sys
input = sys.stdin.readline
from heapq import heappush, heappop
def dijkstra(start):
visited[start] = 0
heap = []
heappush(heap,[visited[start], start])
while heap:
time, cur_node = heappop(heap)
if visited[cur_node] < time:
continue
for next_time, next_node in edges[cur_node]:
if visited[next_node] > time + next_time:
visited[next_node] = time + next_time
heappush(heap, [visited[next_node], next_node])
N, M = map(int, input().split())
# arr가 1이면 못지나감.
arr = list(map(int, input().split()))
edges = {i: [] for i in range(N)}
visited = {i: float('inf') for i in range(N)}
for __ in range(M):
a, b, t = map(int, input().split())
if a != N-1 and b != N-1 and (arr[a] or arr[b]):
continue
edges[a].append((t, b))
edges[b].append((t, a))
dijkstra(0)
print(visited[N-1] if visited[N-1] != float('inf') else -1)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1120 문자열 (0) | 2021.09.30 |
---|---|
[백준][Python] 1238 파티 : 역방향 그래프로 돌아오는 길을 찾자 (0) | 2021.09.30 |
[백준][Python] 17352 여러분의 다리가 되어 드리겠습니다. (0) | 2021.09.29 |
[백준][Python] 15685 드래곤커브 (0) | 2021.09.28 |
[백준][Python] 1065 한수 (0) | 2021.09.28 |