POJ3255---求次短路(用Dijkstra)
来源:互联网 发布:seo 关键字 编辑:程序博客网 时间:2024/05/26 15:59
题目链接
分析:百度翻译一下题目发现是道求最短路且可以重复经过某点的情况,可以用Dijkstra求,具体做法:用 dist1[] 记录最短路,dist2[] 记录次短路。然后还是 spfa, 更新的时候分情况判断一下,次短路可能更新次短路,最短路可能更新次短路和最短路。。。记的更新完后把dist2[]也要加进去。
#include<iostream>#include<cstring>#include<set>using namespace std;const int maxn=5010;const int maxm=400010;const int inf=0x3f3f;int n,m;int p[maxn],eid,pre[maxn];struct edge{ int v,next,w;}e[maxm];void init(){ memset(p,-1,sizeof(p)); eid=0;}void insert(int u,int v,int w){ e[eid].v=v; e[eid].next=p[u]; e[eid].w=w; p[u]=eid++;}void insert2(int u,int v,int w){ insert(u,v,w); insert(v,u,w);}typedef pair<int,int>PII;set<PII>min_heap;int dist[maxn],dist2[maxn];bool vst[maxn];bool dijkstra(int v){ memset(vst,0,sizeof(vst)); memset(dist,0x3f,sizeof(dist)); memset(dist2,0x3f,sizeof(dist2)); dist[v]=0; min_heap.insert(make_pair(0,v)); for(int i=0;i<2*n;i++) { if(min_heap.size()==0)return false; set<PII>::iterator iter=min_heap.begin(); int j=iter->second; min_heap.erase(*iter); vst[j]=true; for(int x=p[j];x!=-1;x=e[x].next){ int f=e[x].v; if(dist[j]+e[x].w>dist[f]&&dist[j]+e[x].w<dist2[f]){ min_heap.erase(make_pair(dist2[f],f)); dist2[f]=dist[j]+e[x].w; min_heap.insert(make_pair(dist2[f],f)); } if(dist2[j]+e[x].w<dist2[f]){ min_heap.erase(make_pair(dist2[f],f)); dist2[f]=dist2[j]+e[x].w; min_heap.insert(make_pair(dist2[f],f)); } if(!vst[f]&&dist[j]+e[x].w<dist[f]){ min_heap.erase(make_pair(dist[f],f)); dist[f]=dist[j]+e[x].w; min_heap.insert(make_pair(dist[f],f)); } } } return true;}int main(){ init(); cin>>n>>m; for(int i=0;i<m;i++){ int a,b,c; cin>>a>>b>>c; insert2(a,b,c); } dijkstra(1); cout<<dist2[n]<<endl;}
阅读全文
0 0
- POJ3255---求次短路(用Dijkstra)
- POJ3255-Roadblocks-dijkstra求次短路
- poj3255 次短路Dijkstra
- POJ3255 Roadblocks 次短路Dijkstra做法
- poj3255 Roadblocks (次短路)
- POJ3255 Roadblocks dij求次短路 [模板]
- Poj 3255(Dijkstra求次短路)
- poj3255次短距离 dijkstra
- 次短路--poj3255
- POJ3255 Roadblocks , 次短路
- POJ3255 Roadblocks(次短路)
- poj3255 次短路
- POJ3255 Roadblocks 【次短路】
- POJ3255(次短路)
- poj3255基础次短路
- poj3255次短路算法
- poj3255-Roadblocks-次短路
- POJ3255次短路模板
- 没想到,中国超融合市场第一竟然是它
- 看完《寻梦环游记》,40岁的我哭的像个小孩
- android 6.0动态权限
- win10 64位IE启动方法
- AI系列免费公开课
- POJ3255---求次短路(用Dijkstra)
- 银行业务办理
- jquery ajax方法调用在session超时以后如何跳转到登录页面?
- css 学习笔记第 一 波
- windows10和Ubuntu16.04双系统后windows10不能正常启动
- Android性能优化的一些总结
- 机器学习---K-Nearest Neighbor算法应用二(手动实现KNN算法)
- 标准模板库----list
- 深度学习网络