Files
Algorithm/백준/Gold/17396. 백도어/백도어.py

40 lines
965 B
Python

import sys
import heapq
input = sys.stdin.readline
N,M = map(int, input().split())
arr = list(map(int, input().strip().split()))
arr[-1] = 0
INF = sys.maxsize
connect = [[] for _ in range(N)]
for i in range(M):
a, b, t = map(int, input().split())
connect[a].append((t, b))
connect[b].append((t, a))
def dijkstra(start, end):
dis_list = [INF for _ in range(N)]
dis_list[start] = 0
pq = []
heapq.heappush(pq, (0, start))
while pq:
dis, node = heapq.heappop(pq)
if dis > dis_list[node]:
continue
for next_cost, next_node in connect[node]:
if dis_list[next_node] > dis_list[node]+next_cost and not arr[next_node]:
dis_list[next_node] = dis_list[node]+next_cost
heapq.heappush(pq, (dis_list[next_node], next_node))
return dis_list[end]
num = dijkstra(0, N-1)
if num==INF:
print(-1)
else:
print(num)