計算最短路和次短路條數

2022-07-24 02:27:11 字數 1722 閱讀 2634

題目:

題意:在給定有向圖中查詢最短路與次短路,如果(最短路+1==次短路)則輸出(最短路條數+次短路條數),否則只輸出最短路條數。

思路:在最短路的鬆弛操作上做些判斷和記錄即可,具體看**吧(有注釋)。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mem(a,b) memset(a,b,sizeof(a))

#define mod 100000007

#define ll long long

#define inf 0x3f3f3f3f

const

double pi = acos(-1.0

);const

int maxn=50000

;using

namespace

std;

inline

intscan()

inttol;

int head[1000*2

];/*

******************前向星存邊*************************

*/struct

edgee[

10000*2

];void add(int start,int ed,int

w)/*

*****************優先佇列優化 *************************

*/struct

node

friend

bool

operator

<(node a,node b)

};priority_queue

q;int cnt[2][1010

];int dis[2][1010

];bool vis[2][1010

];void dij(int start,int

ed)else

if(dis[0][to]==dis[p][s]+w)

else

if(dis[1][to]>dis[p][s]+w)

else

if(dis[1][to]==dis[p][s]+w)}}

}int

n,m;

/********************************初始化******************************

*/void

clear()

mem(head,-1

); mem(cnt,0);

mem(vis,

false

); mem(e,0);

while(!q.empty()) q.pop();}/*

************************************main函式****************************

*/int

main()

ints,f;

cin>>s>>f;

dij(s,f);

//coutcout][f];

if(dis[0][f]+1==dis[1

][f])

cout

}return0;

}

最短路條數計數

題目 洛谷 p1144 最短路計數 主要是定義了兩個陣列,乙個是f i 陣列,表示i這個點能夠提供的方案,乙個是sf i 陣列,表示的是到i這個點的方案數。因為普通的加法原理不好搞定,學長說的 分幾種情況,具體看 中的解釋 include include include include includ...

1796 社交網路 最短路條數

時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 2007年noi全國競賽 在社交網路 social network 的研究中,我們常常使用圖論概念去解釋一些 社會現象。不妨看這樣的乙個問題。在乙個社交圈子裡有 n 個人,人與人之間有不同程 度的關係。我們將這個關係網路對...

最短路 次短路長度與條數模板

題目是hdu 1688 傳送門 模板 include define n 1005 define m 10005 define ll long long define inf 0x3f3f3f3f using namespace std int t,c,s,f,n,m int head n dis n...