最短路計數

2021-09-10 19:56:08 字數 1443 閱讀 1443

題目描述

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

輸入輸出格式

輸入格式:

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

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

輸出格式:

共nn行,每行乙個非負整數,第ii行輸出從頂點11到頂點ii有多少條不同的最短路,由於答案有可能會很大,你只需要輸出 ans mod 100003後的結果即可。如果無法到達頂點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。

在找最短路時增加判斷即可

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define r register

#define maxn 1001000

#define ull long long

inline int read()

while (isdigit(ch))

return s * w;

}struct edge edge[maxn];

int n, num_edge = 0, m;

int head[maxn], dis[maxn], v[maxn], ans[maxn];

const int mod = 100003;

int vis[maxn];

inline void add(int from, int to, int dis)

void spfa(int k)

}else

}} }

}int main()

spfa(1);

for (int i = 1; i <= n; ++i) printf("%d\n", ans[i]);

return 0;

}

最短路計數,次短路計數

acwing 1134.最短路計數 bfs 每個點只出隊一次,且入隊一次 dijkstra 每個點第一次出隊的序列一定滿足拓撲序 bellman ford spfa 出隊的時候都不一定是滿足最小,每個點可能出隊多次,有可能更新前面已經出隊的點,不具備拓撲序 但是要用 spfa 求最短路徑數,也是可以...

最短路計數

乙個無向圖上,沒有自環,所有邊的權值均為1,對於乙個點對 a,b 我們要把所有a與b之間所有最短路上的點的總個數輸出。總數 方程 if dis k map k,j dis j then inc dis k 所有最短路經過的點數之和 先求出floyd,然後 if dis i,k dis k,j dis...

最短路計數

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