給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為非負值。
請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出-1。
輸入格式
第一行包含整數n和m。
接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。
輸出格式
輸出乙個整數,表示1號點到n號點的最短距離。
如果路徑不存在,則輸出-1。
資料範圍
1≤n,m≤1.5×10^5
圖中涉及邊長均不小於0,且不超過10000。
輸入樣例:
3 3
1 2 2
2 3 1
1 3 4
輸出樣例:
3
from heapq import *
n, m = map(int, input().split())
idx = 0
h = [-1]*(n+1)
e, ne, w = [0]*(2*m+1), [0]*(2*m+1), [0]*(2*m+1)
st, dist = [false]*(n+1), [float('inf')]*(n+1)
def add(a, b, wei):
global idx
e[idx], w[idx] = b, wei
h[a], ne[idx] = idx, h[a]
idx += 1
def dijkstra():
heap =
dist[1] = 0
while heap:
if st[cur_idx]: continue
st[cur_idx] = true
i = h[cur_idx]
while i != -1:
wei = w[i]
t = e[i]
if dist[t] > dist[cur_idx] + wei:
dist[t] = dist[cur_idx] + wei
i = ne[i]
for _ in range(m):
a, b, wei = map(int, input().split())
add(a, b, wei)
dijkstra()
print(-1) if dist[n] == float('inf') else print(dist[n])
ACM 演算法 堆優化Dijkstra演算法
對於乙個邊權為正的圖,我們可以利用dijkstra演算法求出單源最短路徑 sssp 對於常規的dijkstra演算法,其複雜度為 o n 2 o n 2 o n2 顯然在 n nn 較大的時候,可能導致耗時過長,通過優化我們可以獲得一種更加快速的dijkstra演算法,時間複雜度為 o m logn...
dij演算法堆優化 Floyd演算法
乙個號稱只有5行 的演算法,由1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。該演算法有於求乙個帶權有向圖 wighted directed graph 的任意兩點的最短距離的演算法,運用了動態規劃的思想,演算法的時間複雜度為o v 3 空間複雜度o v 2 其核心思想是,在兩...
演算法題一堆
演算法題 說明 這些題就不是什麼花樣了,考的是你的基礎知識怎麼樣。再聰明而沒有實學的人都將會被這些題所淘汰。1.鍊錶和陣列的區別在 2.編寫實現鍊錶排序的一種演算法。說明為什麼你會選擇用這樣的方法?3.編寫實現陣列排序的一種演算法。說明為什麼你會選擇用這樣的方法?4.請編寫能直接實現strstr 函...