40 lines
965 B
Python
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) |