P1144 最短路計數

2021-09-26 04:55:24 字數 1391 閱讀 2153

題目描述

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

輸入格式

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

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

輸出格式

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

輸入輸出樣例

輸入 #1

5 71 2

1 32 4

3 42 3

4 54 5

輸出 #111

124說明/提示

1到5的最短路有4條,分別為2條1-2-4-5和2條1-3-4-5(由於4-5的邊有2條)。

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

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

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

分析:開個num陣列

num[i]表示起點到i點的最短路數量

跑最短路的時候更新就行了

注釋了code:

#include

#include

#include

#include

#include

#include

#include

const

int inf=

0x3f3f3f3f

;const

int inn=-(

1<<30)

;using

namespace std;

const

int maxm=

1e6+5;

const

int mod=

100003

;int mark[maxm]

;int d[maxm]

;int head[maxm]

,to[maxm]

,nt[maxm]

,w[maxm]

;int num[maxm]

;int cnt;

void

add(

int x,

int y)

void

spfa

(int st,

int n)

}else

if(d[v]

==d[x]

+w[i])}

}}intmain()

spfa(1

,n);

for(

int i=

1;i<=n;i++

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