POJ 3255 Roadblocks Dijkstra 算法变形
2015-05-11 20:48
441 查看
#include <cstdio> #include <iostream> #include <queue> using namespace std; const int INF = 1000000; const int maxn = 5005; struct edge{ int y,w; edge(int cy,int ww){ y = cy; w = ww; } }; vector<edge> vec[maxn]; int n,m; struct num{ int d,n; bool operator < (const num& a)const{ return d > a.d; } num(int x,int y){ d = x; n = y; } }; int d1[maxn]; int d2[maxn]; void fun(){ priority_queue<num,vector<num>,less<num> > que; for(int i = 1;i <= n;i++){ d1[i] = INF; d2[i] = INF; } d1[1] = 0; que.push(num(0,1)); while(!que.empty()){ num q = que.top(); que.pop(); int u = q.n; int d = q.d; if(d > d2[u]) continue; int cc = vec[u].size(); for(int i = 0 ; i < cc;i++){ edge e = vec[u][i]; int dd2 = d + e.w; if(d1[e.y] > dd2){ swap(d1[e.y],dd2); que.push(num(d1[e.y],e.y)); } if(d2[e.y] > dd2 && dd2 > d1[e.y]){ d2[e.y] = dd2; que.push(num(d2[e.y],e.y)); } } } } int main() { while(scanf("%d%d",&n,&m)!=EOF){ for(int i = 0;i < m;i++){ int x,y,w; scanf("%d%d%d",&x,&y,&w); vec[x].push_back(edge(y,w)); vec[y].push_back(edge(x,w)); } } fun(); printf("%d\n",d2 ); return 0;
相关文章推荐
- POJ - 3255 - Roadblocks(Dijkstra)
- [POJ 3255]Roadblocks[dijkstra][次短路]
- POJ 3255 Roadblocks(Dijkstra)
- POJ3255-Roadblocks-dijkstra求次短路
- POJ 3255 Roadblocks --次短路径
- Roadblocks(poj 3255)
- 【POJ 3255】Roadblocks 【次短路】
- POJ 3255 Roadblocks(次短路,Dijkstra变形+邻接表存储)
- POJ 3255 Roadblocks --次短路径
- POJ 3255 - Roadblocks(次短路)
- POJ - 3255 Roadblocks —— 次短路
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
- poj 3255 Roadblocks
- poj 3255 Roadblocks(无向图次短路 SPFA)
- POJ 3255-Roadblocks(A*+spfa)
- POJ——T 3255 Roadblocks|| COGS——T 315. [POJ3255] 地砖RoadBlocks || 洛谷—— P2865 [USACO06NOV]路障Roadblocks
- poj 3255 Roadblocks(spfa次短路 || Dijsktra)
- poj 3255 Roadblocks
- POJ 3255 Roadblocks——次短路
- POJ 3255 RoadBlocks(次短路+dijkstra变形)