spfa dp 洛谷1144 最短路計數

2021-08-04 11:11:51 字數 1097 閱讀 2029

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

輸入格式:

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

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

輸出格式:

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

輸入樣例#1:

5 7

1 21 3

2 43 4

2 34 5

4 5

輸出樣例#1:

111

24講一下思路吧,跑一遍spfa,由於每條邊的權值為1,所以第一次遍歷到的點的權值肯定是最小的。然後運用dp的思想,每次遍歷到的點的方案數等於前面的方案數之和,於是陣列開大點就能a了。原諒我寫dp是看題解大神的~

這次我的**應該比較清晰~

#include#define maxn 3000000

#define maxm 3000000

#define inf 129302101

using namespace std;

struct edge

;int n,m;

struct edge edge[maxm];

int head[maxn],book[maxn],dis[maxn];

int dp[maxn];

int cnt=0;

void add(int u,int v,int w)

void spfa()

else if(dis[v]==dis[j]+1)

dp[v]+=dp[j]%100003;

} }}

int main()

spfa();

for(int i=1;i<=n;i++)

cout

}

洛谷1144 最短路計數

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

洛谷1144 最短路計數

給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。大水題 為了備忘 還是記下來吧 不推方程了,in code 1 2 dijkstra 4 include5 include6 include7 include8 using namespace std ...

洛谷 1144 模板 最短路計數

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