洛谷P3371 模板 單源最短路徑

2021-08-02 17:32:48 字數 692 閱讀 2780

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...