p3371 【模板】單源最短路徑
看了b站上的spfa演算法講解,重新敲了一遍這個題,學習spfa演算法。
題意:給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。
spfa演算法是對bellman-ford演算法的優化。後者複雜度為o(nm),每一輪都對所有邊確定是否更新。前者將點加入佇列中,用bfs的思想,每次只更新與隊頭相連的邊,再將該邊的另一端點入佇列(若已經在佇列中,就不必再加入;出佇列時更改標記,可重複入佇列)。
#include#include#include#include#includeusing namespace std;
const int maxn = 10000 + 5;
int n,m,s,u,v,w;
bool vis[maxn];//記錄該點是否在佇列裡
int dis[maxn];//源點到該點的最小距離
vectorv1[maxn],v2[maxn];
void bfs(int start)}}
}}int main()
for(int i = 0; i < m; i++)
memset(dis,0x7f,sizeof(dis));
bfs(s);
for(int i = 1; i <= n; i++)
}return 0;
}
洛谷 P3371 模板 單源最短路徑
題目大意 在乙個有向圖中,有m條邊 1 m 500000 n個點 1 n 10000 求點s到1 n個點的最短路徑長度,無最短路就輸出maxlongint。spfa 佇列優化 dis i 表示點s到i的最短路徑,一開始dis陣列為maxlongint。1.用佇列優化,就可以省略列舉每個點的時間,由o...
洛谷 P3371 模板 單源最短路徑
如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。一行,包含n個用空格分隔的整數,其中第i個整數表示從點s出發到點i的最短...
洛谷 P3371 模板 單源最短路徑
如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入格式 第一行包含三個整數n m s 分別表示點的個數 有向邊的個數 出發點的編號。接下來 m 行每行包含三個整數fi gi wi,分別表示第 i 條有向邊的出發點 目標點和長度。輸出格式 一行,包含 n個用空格分隔的整數,其中第 i...