和Dijksta求最短路一样,只是要维护两个数组:最短路d1,次短路d2。然后更新的时候注意细节。

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<cmath>
#include<climits>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<stack>
#include<set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define pb(a) push(a)
#define INF 0x1f1f1f1f
#define lson idx<<1,l,mid
#define rson idx<<1|1,mid+1,r
#define PI  3.1415926535898
template<class T> T min(const T& a,const T& b,const T& c) {return min(min(a,b),min(a,c));
}
template<class T> T max(const T& a,const T& b,const T& c) {return max(max(a,b),max(a,c));
}
void debug() {
#ifdef ONLINE_JUDGE
#elsefreopen("in.txt","r",stdin);//freopen("d:\\out1.txt","w",stdout);
#endif
}
int getch() {int ch;while((ch=getchar())!=EOF) {if(ch!=' '&&ch!='\n')return ch;}return EOF;
}struct HeapNode
{int d,u;bool operator < (const HeapNode &ant) const{return ant.d<d;}
};struct Edge
{int from,to,dist;
};const int maxn=5005;vector<int> g[maxn];
vector<Edge> edge;
int n;
int d1[maxn],d2[maxn];void init()
{for(int i=1;i<=n;i++)g[i].clear();edge.clear();
}void add(int u,int v,int w)
{Edge e=(Edge){u,v,w};edge.push_back(e);g[u].push_back(edge.size()-1);
}
void solve(int s)
{for(int i=1;i<=n;i++)d1[i]=d2[i]=INF;priority_queue<HeapNode> q;d1[s]=0;q.push((HeapNode){0,s});while(!q.empty()){HeapNode x=q.top(); q.pop();if(x.d>d2[x.u])continue;int u=x.u;for(int i=0;i<g[u].size();i++){Edge &e=edge[g[u][i]];int v=e.to;int d=x.d;if(e.dist+d<d1[v]){d2[v]=d1[v];d1[v]=d+e.dist;q.push((HeapNode){d1[v],v});}else if(e.dist+d<d2[v]&&e.dist+d!=d1[v]){d2[v]=d+e.dist;q.push((HeapNode){d2[v],v});}}}
}
int main()
{int m;while(scanf("%d%d",&n,&m)!=EOF){init();for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);add(u,v,w);add(v,u,w);}solve(1);printf("%d\n",d2[n]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/BMan/p/3647537.html

POJ 3255 Roadblocks 次短路相关推荐

  1. POJ - 3255 Roadblocks(次短路)

    题目链接:点击查看 题目大意:求次短路 题目分析:唉,限时训练的时候遇到的这个题,明明之前系统学习过次短路和次小生成树这个方面的知识的,可能是很长时间没 用,板子都忘掉了,不过还好,在考试的时候想到了 ...

  2. poj 3255 Roadblocks (SPFA)

    题目大意:在一个图上有许多个农场,有个人从1农场出发,到他的朋友n农场去,他不想走一条最短路径,这次他想换条路走,要你帮他找一条次短路径,次短路的定义是,比最短路径长度短(可能有多条),但是不会比其他 ...

  3. POJ 3255 次短路

    题目描述 POJ 3255 思路 代码 参考文章 一个没有使用很多编程技巧的方法: 思路是如果有多条最短路,则次短路为最短路,否则次短路. 其中head 数组是用来保存点所对应的边索引(最后一条加入的 ...

  4. [BZOJ1726][Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1277  Solved: 607 ...

  5. bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路(A*第k短路)

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1324  Solved: 627 ...

  6. 【POJ】3255 Roadblocks(次短路+spfa)

    http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...

  7. POJ 3255(迪杰斯特拉算法求次短路)

    POJ3255,问题是求节点1到n的次短路. 在dijkstra求最短路算法的基础上进行变形,用两个数组分别记录源点到各节点最短路径和次短路径: 每次更新时,都将最短路的节点及可能成为次短路的节点pu ...

  8. Poj 3255(dijkstra求次短路)

    题目传送门 详情见<挑战程序设计竞赛>P109 代码如下: #include <algorithm> #include <cstdio> #include < ...

  9. 3255 Roadblocks

    #题目 Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19318   Accepted: 6779 D ...

最新文章

  1. conda安装tensorflow-gpu简洁版_笔记本的垃圾显卡也能装Tensorflow GPU版,简明教程
  2. bitter matlab,两分钟英语自我介绍模板
  3. 本科是学计算机研究生学教育学,教育学研究生好考吗?
  4. 光纤收发器有什么用?光纤收发器的作用是什么?
  5. html表单自动提交表单提交表单数据类型,表单
  6. alipay.php on line 85,Ecshop报错:Strict Standards: Redefining already defined constructor for class...
  7. 基于流程的多维度企业管理框架(第三稿)
  8. python optimize_python多元拟合问题
  9. 学完计算机技术的感受,计算机培训心得体会
  10. (1)初识云计算-《云计算核心技术剖析》学习笔记
  11. pychram终止程序
  12. python实现图片找不同游戏_用Python实现QQ游戏大家来找茬辅助工具
  13. 实验室建立计量管理体系的重要性和意义
  14. 震惊!某徐姓诗人竟,,
  15. ubuntu18.04安装微信——简单操作
  16. 【drawio笔记】在图表中添加和删除图层
  17. 【Python学习笔记】3. Python3 基础语法
  18. usermod--修改用户账号信息命令
  19. 微信小程序(视图与逻辑)
  20. 牛客练习赛13-C题幸运数字III

热门文章

  1. Flutter 中 stateless 和 stateful widget 的区别[Flutter专题60]
  2. 学习go语言国内最全资料链接
  3. 4、Docker 提交运行中容器作为新的镜像
  4. 跨域产生的原因和解决方法_幼儿语言障碍产生的原因及其解决方法
  5. 万豪旅享家官方商城携手神策数据,数字化礼遇更高质量的用户体验
  6. 6 步搭建数据平台—从指标体系到相关技术 | 周四话数据
  7. 如何帮助企业优化商业模式?看精益数据分析的“欺”与“破”
  8. 喜报!良品铺子签约神策数据
  9. SPringBoot+mybatis 框架搭建例子
  10. Intellij Idea 从 Svn 检出 Maven 项目、部署 Tomcat 运行