P1144 最短路計數 題解

2021-10-04 16:43:01 字數 1279 閱讀 6719

同步

原題鏈結

簡要題意:

求從源點開始向各點出發,最短路的個數。

注意到 出題人很善良 資料範圍很強,所以我們採用 spfa

\text

spfa

.在這之前如果你不懂最短路,請務必 左轉弱化模板 或學習 最短路模板 .

ok

\texttt

ok,現在所有人都會了 spfa

\text

spfa

這個演算法。(為了對新手友好,暫且稱之為「演算法」)

好,那麼怎麼計數呢?

具體見**。

時間複雜度:o(n

2)

o(n^2)

o(n2

).(說明見 最短路模板)

實際得分:100pt

s100pts

100pts

.

#pragma gcc optimize(2)

#include

using

namespace std;

const

int n=

2e5+1;

const

int mod=

1e5+3;

inline

intread()

int x=0;

while

(ch>=

'0'&& ch<=

'9') x=

(x<<3)

+(x<<1)

+ch-

'0',ch=

getchar()

;return x*f;

}int n,m,s,dis[n]

,ans[n]

;//ans[i] 為最短路的個數

vectorint,

int>

>g[n]

;bool vis[n]

;inline

void

spfa()

}else

if(dis[v]

==dis[u]

+z) ans[v]

=(ans[u]

+ans[v]

)%mod;

//如果相等則計數累加}}

}int

main()

spfa()

;for

(int i=

1;i<=n;i++

)printf

("%d\n"

,ans[i]);

return0;

}

題解 P1144 最短路計數

這道題用一次spfa就可以過了。在求最短路的同時,對答案進行統計即可。實現 dis i 表示從1到 i 的最短路 實在還是不懂的話看程式吧 當 dis i dis j 1 時,直接令 ans i ans j 即可。當 dis i dis j 1 時,那麼到 i 的路徑就可以多加上 j 的路徑,即 a...

P1144 最短路計數

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

P1144 最短路計數

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