例題題解 最短路計數

2021-09-10 16:49:08 字數 1298 閱讀 4820

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

從最基礎的dj思考:

迭代式進行迭代定然滿足d[p

]+va

l

np

]d[p]+vald[

p]+v

alnp

]其中p

pp表示當前迴圈的點,npnp

np表示與p

pp相連的新列舉的點。

因此我們在這一處轉移做變化:

當d [p

]+va

l=d[

np

]d[p]+val=d[np]

d[p]+v

al=d

[np]

時,累加答案。

當d [p

]+va

l=d[

np

]d[p]+val=d[np]

d[p]+v

al=d

[np]

時,更新答案和最短路。

**如下:

#include

using

namespace std;

const

int n=

2000000

;const

int p=

100003

;int n,m;

int v[n]

,d[n]

,ans[n]

;vector<

int>a[n]

;inline

void

read

(int

&s)int

main

(void

)memset

(v,0

,sizeof

(v))

;memset

(d,30

,sizeof

(d))

; d[1]

=0,ans[1]

=1; priority_queue< pair<

int,

int>

> q;

q.push

(make_pair(0

,1))

;while

(q.size()

)}for(

int i=

1;i<=n;

++i)

printf

("%d\n"

,ans[i]);

return0;

}

最短路計數,次短路計數

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

最短路計數

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