poj 3255 Roadblocks
2017-11-19 18:14
302 查看
http://poj.org/problem?id=3255
找第二短的路,次短路模板题。
找第二短的路,次短路模板题。
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #define maxn 5010 #define maxm 100010 #define inf 1000000000 using namespace std; int disa[maxn],disb[maxn]; int to[2*maxm],len[2*maxm],next[2*maxm],head[maxn],q[maxn]; bool vis[maxn]; int n,m,num; void spfa() { memset(vis,0,sizeof(vis)); for (int i=1;i<=n;i++) disa[i]=disb[i]=inf; int l=0,r=1; disa[1]=0;vis[1]=1;q[1]=1; while (l!=r) { l++;if (l==maxn) l=0; int x=q[l]; for (int p=head[x];p;p=next[p]) { bool w=0; if (disa[x]+len[p]<disa[to[p]]) { disb[to[p]]=min(disa[to[p]],disb[x]+len[p]); disa[to[p]]=disa[x]+len[p]; w=1; } else if (disa[x]+len[p]>disa[to[p]] && disa[x]+len[p]<disb[to[p]]) { disb[to[p]]=disa[x]+len[p];w=1; } else if (disa[x]+len[p]==disa[to[p]] && disb[x]+len[p]<disb[to[p]]) { disb[to[p]]=disb[x]+len[p];w=1; } if (w && !vis[to[p]]) { vis[to[p]]=1; r++;if (r==maxn) r=0; q[r]=to[p]; } } vis[x]=0; } } void addedge(int x,int y,int z) { num++;to[num]=y;len[num]=z;next[num]=head[x];head[x]=num; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { for (int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); addedge(x,y,z); addedge(y,x,z); } spfa(); printf("%d\n",disb ); } return 0; }
相关文章推荐
- POJ 3255 Roadblocks(Dijkstra)
- POJ - 3255 - Roadblocks(Dijkstra)
- Roadblocks POJ - 3255 (次段路)
- poj 3255 Roadblocks
- POJ3255 - Roadblocks - 次短路(spfa+LLL优化)
- poj 3255 Roadblocks(无向图次短路 SPFA)
- POJ 3255 - Roadblocks(次短路)
- [POJ 3255]Roadblocks[dijkstra][次短路]
- POJ 3255-Roadblocks(A*+spfa)
- POJ 3255 Roadblocks(Dijstra 求次短路长度)
- POJ 3255 Roadblocks Dijkstra 算法变形
- 【POJ 3255】Roadblocks 【次短路】
- POJ 3255 Roadblocks --次短路径
- POJ 3255 Roadblocks——次短路
- poj-3255 Roadblocks ***
- POJ 3255 Roadblocks (次短路问题)
- poj 3255 Roadblocks
- POJ 3255 Roadblocks --次短路径
- POJ - 3255 Roadblocks —— 次短路
- POJ——T 3255 Roadblocks|| COGS——T 315. [POJ3255] 地砖RoadBlocks || 洛谷—— P2865 [USACO06NOV]路障Roadblocks