P1144 最短路計數

2021-09-29 06:35:25 字數 1251 閱讀 4836

題目描述

給出乙個nn個頂點mm條邊的無向無權圖,頂點編號為1-n1−n。問從頂點11開始,到其他每個點的最短路有幾條。

輸入格式

第一行包含22個正整數n,mn,m,為圖的頂點數與邊數。

接下來mm行,每行22個正整數x,yx,y,表示有一條頂點xx連向頂點yy的邊,請注意可能有自環與重邊。

輸出格式

共nn行,每行乙個非負整數,第ii行輸出從頂點11到頂點ii有多少條不同的最短路,由於答案有可能會很大,你只需要輸出 ans \bmod 100003ansmod100003後的結果即可。如果無法到達頂點ii則輸出00。

輸入輸出樣例

輸入 #1 複製

5 71 2

1 32 4

3 42 3

4 54 5

輸出 #1 複製11

124說明/提示

11到55的最短路有44條,分別為22條1-2-4-51−2−4−5和22條1-3-4-51−3−4−5(由於4-54−5的邊有22條)。

對於20%20%的資料,n ≤ 100n≤100;

對於60%60%的資料,n ≤ 1000n≤1000;

對於100%100%的資料,n<=1000000,m<=2000000n<=1000000,m<=2000000。

用spfa求最短路,然後記錄有多少個相同的到該點的最短路。

**:

#include

using namespace std;

const

int maxn =

1000000

;vector<

int>e[maxn]

;int n,m,u,v;

int d[maxn]

,inq[maxn]

;int ans[maxn]

;void

init()

for(

int i=

0;i)for

(int i=

0;ivoid

spfa

(int root)}if

(d[v]

==d[now]+1

)}inq[now]=0

;}}int

main()

spfa(1

);for(

int i =

1; i <= n; i++

) cout << ans[i]

<< endl;

return0;

}

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

P1144 最短路計數

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