洛谷1144 最短路的個數

2021-09-02 21:42:17 字數 824 閱讀 9699

我們直接在spfa的過程中使用cnt陣列記錄最短路的個數,用dijkstra也可以!

更新cnt分情況:

如果dis[next]>dis[now]+1

那麼之前到達點next的路》dis[now]+1

cnt[next]=cnt[now]如果dis[next]==dis[now]+1

那麼之前到達點next的路也有距離為dis[now]+1的點。

cnt[next]+=cnt[now]#include using namespace std;

#define ll long long

#define inf 0x3f3f3f3f

#define res register int

const int maxn=1e6+5;

vectorv[maxn];

int dis[maxn],vis[maxn];

int cnt[maxn];

int n,m,mod=100003;

//最短路的個數

void spfa()

}else if(dis[y]==dis[x]+1)}}

}} int main()

{ scanf("%d%d",&n,&m);

int from,to;

for(res i=0;i我們可以用vectorpre[maxn]記錄下每乙個節點被最短到達的前乙個點的節點序號。因為我們記錄的都是前驅,所以我們可以從終點出發。這樣遍歷到的每乙個節點都在最短路上面。然後我們dfs或者bfs,ans+每乙個遍歷到節點前驅的個數-1。最後輸出讓ans+1。

洛谷1144 最短路計數

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

洛谷1144 最短路計數

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。大水題 為了備忘 還是記下來吧 不推方程了,in code 1 2 dijkstra 4 include5 include6 include7 include8 using namespace std ...

洛谷 1144 模板 最短路計數

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