题目链接:http://poj.org/problem?id=3255

题目大意:n个点,m条边,求1号点到n号点的次短路。

分析:继续用dijkstra求。dis[ ]数组表示最短路,dis2[ ]数组表示次短路,当有一个距离d2,介于dis和dis2之间时,更新次短路距离。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define inf 0x3f3f3f3f
const int N = 200010;
int n, m, cnt, head[N], dis[5005], dis2[5005];
struct Edge{int to, nxt, w;
}edge[N];
struct node{int id, w;node(){}node(int id, int w){this->id = id;this->w = w;}
};
bool operator < (const node a, const node b)
{return a.w > b.w;
}
void add(int a, int b, int w)
{edge[cnt].to = b;edge[cnt].w = w;edge[cnt].nxt = head[a];head[a] = cnt++;
}
void dijkstra()
{priority_queue<node> q;node tmp;q.push(node(1, 0));memset(dis, inf, sizeof dis);memset(dis2, inf, sizeof dis2);dis[1] = 0;while(!q.empty()){tmp = q.top();q.pop();int num = tmp.id;int d = tmp.w;if(dis2[num] < d) continue;//不是最短路,也不是次短路,忽略 for(int i = head[num]; i != -1; i = edge[i].nxt){int j = edge[i].to;int d2 = d + edge[i].w;if(dis[j] > d2)//更新最短路 {swap(dis[j], d2);q.push(node(j, dis[j]));}if(dis[j] < d2 && d2 < dis2[j])//跟新次短路 {dis2[j] = d2;q.push(node(j, dis2[j]));}}}
}
int main()
{while(~scanf("%d %d", &n, &m)){cnt = 0;memset(head, -1, sizeof head);while(m--){int a, b, w;scanf("%d %d %d", &a, &b, &w);add(a, b, w);add(b, a, w);}dijkstra();printf("%d\n", dis2[n]);}return 0;
}

POJ-3255--次短路相关推荐

  1. POJ 3255 次短路

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

  2. POJ 3165 最短路 floyd

    POJ  3165  最短路 floyd http://poj.org/problem?id=3615 dp方程(f[i][j]>MAX(f[i][k],f[k][j])) f[i][j]=MA ...

  3. POJ 3255 Roadblocks 次短路

    和Dijksta求最短路一样,只是要维护两个数组:最短路d1,次短路d2.然后更新的时候注意细节. //#pragma comment(linker, "/STACK:1024000000, ...

  4. POJ - 3255 Roadblocks(次短路)

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

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

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

  6. Poj 3255(dijkstra求次短路)

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

  7. poj 1797(最短路变形)

    题目链接:http://poj.org/problem?id=1797 思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量.其实就是一最短路的变形,定义wei ...

  8. poj 3255 Roadblocks (SPFA)

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

  9. poj 1161 最短路构图

    题目链接:http://poj.org/problem?id=1161 #include <cstdio> #include <cmath> #include <algo ...

  10. poj 2263 最短路变形——最小边的最大值

    文章目录 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 poj2253

最新文章

  1. golang 中 map 转 struct
  2. java的empty_Java Stack empty()方法与示例
  3. 列表输出循环左移_python 列表推导式(经典代码)(21)
  4. 树链剖分 讲解+模板+习题
  5. asp.net下url参数含有中文读取后为乱码
  6. 与网络计算机相比,和通信网络相比,计算机网络最本质的功能是什么
  7. PS2022神经滤镜Neural Filters离线安装包(PS2022/PS2021)
  8. 基于ARM-Linux系统开发平台下嵌入式MP3的设计与实现
  9. windows关闭休眠
  10. OCUI界面设计:导航控制器
  11. 论文阅读:NEURAL MACHINE TRANSLATIONBY JOINTLY LEARNING TO ALIGN AND TRANSLATE
  12. vn.py源码解读(八、回测结果计算代码解析)
  13. (Modern Family S01E01) Part 9 PhilClair 射Luke、Haley和Dylan躺床上看电影
  14. halcon面阵相机标定矫正
  15. 如何查看磁盘是GUID格式(GPT)还是MBR格式?判别UEFI模式启动,还是Legacy模式启动?
  16. 实现运动目标检测(opencv3)(一)
  17. np.arange与np.linspace细微区别(数据溢出问题)
  18. 『2021语言与智能技术竞赛』-机器阅读理解任务基线系统详解
  19. LeetCode 题解随笔:动态规划(一)
  20. 【Qt】2D绘图之抗锯齿渲染

热门文章

  1. iPhone语音拍照怎么用?
  2. 编译error: no acceptable C compiler found in $PATH
  3. cocoapods最新踩坑以及更新
  4. dnspod java_使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法
  5. IBMMQ-安装IBMMQ服务端7.5(windows)
  6. 开源中国广州源创会分享
  7. 【二分图最佳匹配】丘比特的烦恼
  8. 计算机专业就业推荐表中求职意愿,毕业生推荐表的求职意愿怎么填啊?
  9. SpringBoot中Hibernate-validator的使用
  10. 推荐系统实践读书笔记-08评分预测问题