同步
原題鏈結
簡要題意:
求從源點開始向各點出發,最短路的個數。
注意到 出題人很善良 資料範圍很強,所以我們採用 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行輸...