poj 3255 Roadblocks(次短路)
2015-08-10 13:18
453 查看
题意:一幅带权无向图求次短路;
思路:每次维护最短路和次短路,先更新最短再更新次短;求次短路径的长度;
思路:每次维护最短路和次短路,先更新最短再更新次短;求次短路径的长度;
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; #define INF 0x3f3f3f3f typedef pair<int,int>P; int N,R; struct edge{ int to,cost; edge(int a,int b){ to=a;cost=b; } }; vector<edge> G[500010]; int dist[500010]; //最短路 int dist2[500010]; //次短路 void solve(){ priority_queue<P,vector<P>,greater<P> > que; fill(dist+1,dist+N+1,INF); fill(dist2+1,dist2+N+1,INF); dist[1]=0; que.push(P(0,1)); while(!que.empty()){ P p=que.top();que.pop(); int v=p.second,d=p.first; if(dist2[v]<d) continue; for(int i=0;i<G[v].size();i++){ edge &e=G[v][i]; int d2=d+e.cost; if(dist[e.to]>d2){ swap(dist[e.to],d2); que.push(P(dist[e.to],e.to)); } if(dist2[e.to]>d2&&dist[e.to]<=d2){ dist2[e.to]=d2; que.push(P(dist2[e.to],e.to)); } } } printf("%d\n",dist2 ); } int main() { int i,j,k,a,b,c; while(scanf("%d%d",&N,&R)!=EOF){ memset(G,0,sizeof(G)); for(i=0;i<R;i++){ scanf("%d%d%d",&a,&b,&c); G[a].push_back(edge(b,c)); G[b].push_back(edge(a,c)); } solve(); } return 0; }
相关文章推荐
- unity, write/read txt file
- 对一些简单排序算法的效率比较
- Python 中的进程、线程、协程、同步、异步、回调
- Android 网络:使用URLConnection提交请求,获取html代码加载WebView
- Linux MySQL
- Highcharts 饼图数值显示在图形上
- 高德地图报错:BaseMapView initWithFrame exception
- Log4j最佳实践
- idea自动生成serialVersionUID
- HDU 1159(Common Subsequence)最长公共子序列
- CentOS7.0部署Docker
- C++中随机函数rand()和srand()的用法
- C语言基础小知识
- Linked List Cycle
- 10令人惊叹的模型的影响HTML5应用程序及源代码
- 在业务中找痛点
- LCS-基础
- 浅谈管理系统操作日志设计(附操作日志类)
- 自定义ViewGroup控件(二)----->流式布局进阶(二)
- 在业务中找痛点