問題描述
給定乙個n個頂點,m條邊的有向圖(其中某些邊權可能為負,但保證沒有負環)。請你計算從1號點到其他點的最短路(頂點從1到n編號)。
輸入格式
第一行兩個整數n, m。
接下來的m行,每行有三個整數u, v, l,表示u到v有一條長度為l的邊。
輸出格式
共n-1行,第i行表示1號點到i+1號點的最短路。
樣例輸入
3 31 2 -1
2 3 -1
3 1 2
樣例輸出
-1-2
最短路詳細思路
因為可能有負權,又是求單源最短路徑。所以我們使用簡單的spfa演算法。
import queue
defspfa()
: q = queue.queue(
) q.put(1)
#開始結點1號入隊
in_queue[1]
=1#標誌其在佇列中
dis[1]
=0while
not q.empty():
u = q.get(
)#彈出隊首結點
in_queue[u]=0
for v in map_d[u]
:#遍歷u的所有鄰接邊u->v
dis_v = map_d[u]
[v]if dis[v]
>
(dis[u]
+dis_v)
: dis[v]
= dis[u]
+dis_v
if(in_queue[v]==0
):#如果v不在佇列中,將v加入佇列
in_queue[v]=1
q.put(v)
if __name__==
"__main__"
: n,m =
map(
int,
input()
.split())
map_d =
dis =
[float
('inf'
)for i in
range
(n+1)]
in_queue =[0
for i in
range
(n+1)]
#判斷是否結點在佇列中
for i in
range
(m):
u,v,l =
map(
int,
input()
.split())
map_d.setdefault(u,
)[v]
= l #使用值為字典的字典存放u->v邊和其的權值l
spfa(
)for i in
range(2
,n+1):
print
(dis[i]
)
藍橋杯 演算法訓練 Lift and Throw
演算法訓練 lift and throw 時間限制 3.0s 記憶體限制 256.0mb 問題描述 給定一條標有整點 1,2,3,的射線.定義兩個點之間的距離為其下標之差的絕對值.laharl,etna,flonne一開始在這條射線上不同的三個點,他們希望其中某個人能夠到達下標最大的點.每個角色只能...
藍橋杯 演算法訓練 數列
題目 演算法訓練 數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,31,3 0 31,3 2,...
藍橋杯 演算法訓練 Glenbow Museum
資料規模和約定 按題目描述所示。問題描述 卡城著名的格林堡博物館是加拿大西部最大的博物館,展品涵蓋了藝術 文化史以及礦物學。如今乙個全新的展區正在被布置,它是專門為你這樣傑出的程式猿 媛 打造的。不幸的是,由於空間不足,博物館打算建造一棟新的建築來重新安置這個展區。新的建築的尺寸和容量將不同於原始的...