题目:
代码:
from heapq import *
#堆优化版本的最短路算法(dijkstra)
N=150010
h=[-1 for _ in range(N)]
e=[-1 for _ in range(N)]
ne=[-1 for _ in range(N)]
w=[-1 for _ in range(N)]
idx=0
st=[False for _ in range(N)]
dist=[float('inf') for _ in range(N)]
def add(a,b,c):
global idx
e[idx]=b
w[idx]=c
ne[idx]=h[a]
h[a]=idx
idx+=1
def dijkstra():
dist[1]=0
heap=[]
heappush(heap,(0,1))
while heap:
d,ver=heappop(heap)
if(st[ver]) :
continue
st[ver]=True
i=h[ver]
while i!=-1:
j=e[i]
if dist[j]> d + w[i]:
dist[j]=d+w[i]
heappush(heap,(dist[j],j))
i=ne[i]
if dist[n] == float('inf'):
return -1
else:
return dist[n]
if __name__== "__main__":
n,m=map(int, input().split())
while m:
m-=1
a,b,c=map(int,input().split())
add(a,b,c)
print(dijkstra())