一.模板
dis[t][0]:表示 s ss 到 t tt 的最短路;
dis[t][1] dis[t][1]dis[t][1]:表示 s ss 到 t tt 的次短路;
堆優化的dijkstra模板
#includeusingview codenamespace
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;
}
第二種版本:
#include usingview codenamespace
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()
spfa模板
#includeusingview codenamespace
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;
}
二.習題
1.p2865 [usaco06nov]路障roadblocks ---三種都行 去掉最短路的輸出
#includeusingview codenamespace
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;
}
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 從優先佇列...