給出乙個n個頂點m條邊的無向無權圖,頂點編號為1~n。問從頂點1開始,到其他每個點的最短路有幾條。
輸入格式:
輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。
接下來m行,每行兩個正整數x, y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。
輸出格式:
輸出包括n行,每行乙個非負整數,第i行輸出從頂點1到頂點i有多少條不同的最短路,由於答案有可能會很大,你只需要輸出mod 100003後的結果即可。如果無法到達頂點i則輸出0。
輸入樣例#1:
5 71 21 3
2 43 4
2 34 5
4 5
輸出樣例#1:
11124
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。
這題很明顯是最短路動規。
用spfa就好。
搜到一條新路時,如果長度和原來的最長值相同,就累加路徑數(因為相當於找到新的路,用加法原理)。
如果不相同,就替換成小的。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8using
namespace
std;
9const
int mxn=240000;10
intdis[mxn],num[mxn];
11 vectore[mxn];
12int
n,m;
13bool
inq[mxn];
14void spfa(int
s)29
//長度不相同時,取較短的路
30else
if(dis[u]+1
3536}37
}38return;39
}40intmain()
52 memset(dis,0x5f,sizeof
dis);
53//
從起點開始spfa
54 spfa(1
);55
for(i=1;i<=n;i++)
58return0;
59 }
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行,每行2個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。共n行,每行乙個非負整數,第ii行輸出從...