洛谷 p4779【模板】單源最短路徑(標準版)
2018 年 7 月 19 日,某位同學在 noi day 1 t1 歸程 一題裡非常熟練地使用了乙個廣為人知的演算法求最短路。
然後呢?
100→60 ;
ag→cu ;
最終,他因此沒能與理想的大學達成契約。
小 f 衷心祝願大家不再重蹈覆轍。
給定乙個 n 個點, m條有向邊的帶非負權圖,請你計算從 s 出發,到每個點的距離。
資料保證你能從 s 出發到任意點。
輸入格式:
第一行為三個正整數 n, m, s。 第二行起 m 行,每行三個非負整數 ui,vi,wi,表示從 ui到 vi有一條權值為 wi的邊。
輸出格式:
輸出一行 n 個空格分隔的非負整數,表示 s 到每個點的距離。
輸入樣例#1: 複製
4 6 1輸出樣例#1: 複製1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4
0 2 4 3樣例解釋請參考 資料隨機的模板題。
1 ≤ n ≤ 100000 ;
1 ≤ m ≤ 200000 ;
s = 1;
1 ≤ ui,vi ≤ n ;
0 ≤ wi ≤ 109,
0 ≤ ∑wi ≤ 109 。
本題資料可能會持續更新,但不會重測,望周知。
思路:spfa+優先佇列優化 or dijkstra+堆優化
用p3371中的**(再開上long long),可以過掉後兩個點,但前幾個點都會tle
#include#includespfa+優先佇列#include
#include
#include
#include
#define m 100005
using
namespace
std;
intn, m, s, a, b, c;
struct
edge ;
vector
g[m];
inline
intread()
long
long
dis[m];
bool
inqueue[m];
struct
node ;
bool
operator
< (const node &x, const node &y)
priority_queue
q;int
cnt;
bool
hasout[m];
inline
bool spfa(int
s) );
inqueue[s] = 1; dis[s] = 0
;
intu, v, cost;
while(!q.empty()) );}}
}}
return1;
}int
main() );
}spfa(s);
for(register int i = 1; i <= n; ++i)
printf(
"%d
", dis[i]);
return0;
}
洛谷P4779 單源最短路徑與Dijkstra演算法
蒟蒻出品,歡迎指正 dijkstra演算法 由於字母太多,以下統一用dij代替 逃 dij演算法,使用廣度優先搜尋與貪心演算法解決單源圖的最短路徑問題,不適用於有負權邊的圖。時間複雜度 o mlogn n為頂點數,m為邊數。演算法思路 對於所需求解的圖,首先假設任意兩頂點之間距離為正無窮。然後開始加...
洛谷 P4779 模板 單源最短路徑(標準版)
求單源最短路徑。可以記住的模板有 堆優化的 dijkstra,bellman ford,spfa。堆優化的 dijkstra 演算法複雜度為 o e t dk v tem o e cdot t v cdot t o e tdk v tem 其中 e e e 是邊集大小,v v v 是點集大小,t d...
洛谷P4779 模板 單源最短路徑(標準版)
2018 年 7 月 19 日,某位同學在 noi day 1 t1 歸程 一題裡非常熟練地使用了乙個廣為人知的演算法求最短路。然後呢?100 rightarrow 60100 60 ag rightarrow cuag cu 最終,他因此沒能與理想的大學達成契約。小 f 衷心祝願大家不再重蹈覆轍。...