題解 P1144 最短路計數

2022-03-19 08:11:45 字數 740 閱讀 9250

這道題用一次spfa就可以過了。在求最短路的同時,對答案進行統計即可。

實現:\(dis_i\)表示從1到\(i\)的最短路(實在還是不懂的話看程式吧)。

當\(dis_i>dis_j+1\)時,直接令\(ans_i=ans_j\)即可。

當\(dis_i=dis_j+1\)時,那麼到\(i\)的路徑就可以多加上\(j\)的路徑,即\(ans_i=ans_i+ans_j\)。

**:

#include using namespace std;

int n , m , p = 100003;

int ans[1000010] , dis[1000010];

bool vis[1000010];

vectora[1000010];

queueq;

void spfa()

}else if(dis[y] == dis[x] + 1) ans[y] = (ans[y] + ans[x]) % p;

} vis[x] = 0; //出佇列了就可以標記未走過了,因為我們要重複更新這個點直到最優 }}

int main()

for(int i = 1; i <= n; i++) dis[i] = 0x7fffffff;

spfa();

for(int i = 1; i <= n; i++) cout << ans[i] << endl;

return 0;

}

P1144 最短路計數 題解

同步 原題鏈結 簡要題意 求從源點開始向各點出發,最短路的個數。注意到 出題人很善良 資料範圍很強,所以我們採用 spfa text spfa 在這之前如果你不懂最短路,請務必 左轉弱化模板 或學習 最短路模板 ok texttt ok,現在所有人都會了 spfa text spfa 這個演算法。為...

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