最短路(SPFA演算法)模板題 洛谷P3371

2021-10-20 19:43:36 字數 947 閱讀 2138

spfa演算法是寬搜優化版bellman-ford演算法。

這是一種基於鬆弛(relax)操作的最短路演算法。支援負權。

能找到某個結點出發到所有結點的最短路,或者報告某些最短路不存在。

演算法區別於bellman-ford的核心思想就是:只有當某個頂點u的d【u】發生改變時,它的鄰接點v的d【v】才可能被改變。

在此附上洛谷p3371模板題。

在此附上spfa版ac**:

#include

#include

using

namespace std;

int n, m, s, cnt;

struct bian edge[

1000000];

int head[

10005];

int dis[

10005];

int vis[

10005];

void

init()

}void

add(

int u,

int v,

int w)

intmain()

queue<

int> q;

q.push

(s);

vis[s]=1

; dis[s]=0

;while

(q.size()

)}}}

for(

int i=

1;i<=n;i++

)return0;

}

洛谷 P1144 最短路計數(最短路 SPFA)

傳送門 資料範圍看起來好像很嚇人,但我還是水過去了嘻嘻 先跑一遍spfa確定最短路長度,然後用記憶化搜尋累加答案 點1到點1的答案為1,然後遞迴搜尋,如果下乙個點在最短路徑上,我就把我的答案加上它的答案 code include include include struct nodea 400001...

spfa演算法(洛谷模板題)

一 概況 spfa演算法是常用的最短路演算法之一,複雜度還是非常可觀的。但缺點在於遇到稠密圖或者某些奇特的圖時可能會變慢。spfa演算法是一種單元演算法,選擇乙個出發點,計算它與其他點的最短距離。通過更新邊來不斷更新最短路。在圖論的最短路題中應用十分廣泛。二 過程 1.初始化每個節點到第乙個點的距離...

洛谷最短路計數SPFA

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每行乙個非負整數,第i行輸...