最短路與次短路計數

2022-07-17 12:57:15 字數 2463 閱讀 4986

poj  3464  

問最短路的條數+比最短路權值大 1  的條數

做法  比較一下次短路和最短路的值  若次短路恰好比最短路大1,答案為最短路+次短路條數,否則答案就是最短路條數

1 #include2

const

int inf=0x3f3f3f3f;3

class count_short_path e[me];

11int n,le,head[mv],cnt[mv][2

],i,j,k,u,v,tmp,flag;

12 typec dist[mv][2

],w;

13bool used[mv][2

];14

public:15

void init(int tn)

20void add(int u,int

v,typec w)

26void solve(int s) 33}

34 dist[s][0]=0

;35 cnt[s][0]=1;36

for(k=1; k2; k++) else

if(!used[j][1]&&tmp>dist[j][1

]) 48}49

if(tmp==inf) break

;50 used[u][flag]=1;51

for(i=head[u]; ~i; i=e[i].next)

60else

if(tmp+w==dist[v][0

]) 63

else

if(tmp+w1

]) 67

else

if(tmp+w==dist[v][1

]) 70}71

}72}73 typec getdist(int id,int flag)

76int getcnt(int id,int flag)

79} g;

80int

main()

90 scanf("

%d%d

",&u,&v);

91g.solve(u);

92int ans=g.getcnt(v,0

);93

if(g.getdist(v,0)==g.getdist(v,1)-1) ans+=g.getcnt(v,1

);94 printf("

%d\n

",ans);95}

96}97return0;

98 }

view code

hdu  

1 #include2 #include3

using

namespace

std;

4const

int inf=0x3f3f3f3f;5

class count_short_path e[me];

13int n,le,head[mv],cnt[mv][2

],i,j,k,u,v,tmp,flag;

14 typec dist[mv][2

],w;

15bool used[mv][2

];16

public:17

void init(int tn)

22void add(int u,int

v,typec w)

28void solve(int s) 35}

36 dist[s][0]=0

;37 cnt[s][0]=1;38

for(k=1; k2; k++) else

if(!used[j][1]&&tmp>dist[j][1

]) 50}51

if(tmp==inf) break

;52 used[u][flag]=1;53

for(i=head[u]; ~i; i=e[i].next)

62else

if(tmp+w==dist[v][0

]) 65

else

if(tmp+w1

]) 69

else

if(tmp+w==dist[v][1

]) 72}73

}74}75 typec getdist(int id,int flag)

78int getcnt(int id,int flag)

81} g;

82int

main()

90g.solve(s);

91 printf("

%d %d\n

",g.getdist(e,1),g.getcnt(e,1

));92}93

return0;

94 }

view code

最短路計數,次短路計數

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的邊,請注意可能有自環與重...