次短路模板 習題

2022-06-27 13:18:15 字數 2981 閱讀 7714

一.模板

dis[t][0]:表示 s ss 到 t tt 的最短路;

dis[t][1] dis[t][1]dis[t][1]:表示 s ss 到 t tt 的次短路;

堆優化的dijkstra模板

#includeusing

namespace

std;

#define maxn 1000010

#define inf 0x3f3f3f3ftypedef

long

long

ll;typedef pair

int>pii;

struct

edgeedge[maxn

<<2

];ll dis[maxn][2];

int n,m,s,t,tot=0

,vis[maxn],head[maxn];

void

add(ll u,ll v,ll w)

void

dijkstra()

if(dis[edge[i].to][1]>d&&dis[edge[i].to][0]//

更新次短路

dis[edge[i].to][1]=d;

que.push(pii(d,edge[i].to));}}

}}int

main()

scanf(

"%d%d

",&s,&t); //

起點,終點

dijkstra();

printf(

"%lld %lld\n

",dis[t][0],dis[t][1]);//

最短路,次短路

return0;

}

view code

第二種版本:

#include using

namespace

std;

#define res register int

#define inf 0x3f3f3f3f

const

int maxn=5005

;int n,m,ans=1

;int

head[maxn];

intdis1[maxn],dis2[maxn];

struct

node;

bool

operator

node b)

struct

edgee[

100005*2];

void add(int x,int y,int

val)

void

dijkstra()

);

while(!q.empty()));

}if(dis2[to]>temp&&dis1[to]}}

}}

void

init()

fill(dis1,dis1+n+1

,inf);

fill(dis2,dis2+n+1

,inf);

dis1[

1]=0;}

intmain()

view code

spfa模板

#includeusing

namespace

std;

#define maxn 1000010

#define inf 0x3f3f3f3ftypedef

long

long

ll;struct

edgeedge[maxn

<<2

];ll dis[maxn][2];

int n,m,s,t,tot=0

,vis[maxn],head[maxn];

void

add(ll u,ll v,ll w)

void

spfa()

}if(dis[v][1]>dis[u][0]+w && dis[u][0]+w>dis[v][0

]) }

if(dis[v][1]>dis[u][1]+w)}}

}}int

main()

scanf(

"%d%d

",&s,&t);

spfa();

printf(

"%lld %lld\n

",dis[t][0],dis[t][1

]);

return0;

}

view code

二.習題

1.p2865 [usaco06nov]路障roadblocks   ---三種都行   去掉最短路的輸出

#includeusing

namespace

std;

#define maxn 1000010

#define inf 0x3f3f3f3ftypedef

long

long

ll;struct

edgeedge[maxn

<<2

];ll dis[maxn][2];

int n,m,s,t,tot=0

,vis[maxn],head[maxn];

void

add(ll u,ll v,ll w)

void

spfa()

}if(dis[v][1]>dis[u][0]+w && dis[u][0]+w>dis[v][0

]) }

if(dis[v][1]>dis[u][1]+w)}}

}}int

main()

s=1,t=n;

spfa();

printf(

"%lld\n

",dis[t][1

]);

return0;

}

view code

POJ3255次短路模板

模板級次短路問題 與最短路的區別在於,優先佇列儲存的物件不同,佇列中同時儲存了 1 到某個點u的最短路 u到v的邊 2 到某個點u的次短路 u到v的邊 用這兩種情況重新整理最短路和次短路,所以temp x.d edge i dist include include include include i...

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

題目是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...

K短路 模板

a spfa演算法 1 將有向圖的所有邊正向 反向分別存入兩個不同的邊集 edges,edges1 中。用反向邊集,以所求終點t為源點,利用spfa或dijkstra求解出所有點到t的最短路徑,用dist i 陣列來表示點i到點t的最短距離。2 建立乙個優先佇列,將源點s加入到佇列中。3 從優先佇列...