Roadblocks

题意:求次短路

思路:见注释,用dijkstra同时维护最短路和次短路

// Decline is inevitable
// Romance will last forever
// UVA 10917
#include <bits/stdc++.h>
#define mst(a, x) memset(a, x, sizeof(a))
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 5e3 + 10;
const int maxm = 2e5 + 10;
struct Edge {int to, dis, next;
}edge[maxm];
int n, m;
int head[maxn], dis[maxn], cnt; //最短路
int dis2[maxn]; //次短路struct node {int dis;int pos;node(int _dis = 0, int _pos = 0) : dis(_dis), pos(_pos) {}bool operator <(const node &x) const {return dis > x.dis;}
};
void add_edge(int u, int v, int w) {cnt++;edge[cnt].to = v;edge[cnt].dis = w;edge[cnt].next = head[u];head[u] = cnt;
}
priority_queue<node> q;
void dijkstra(int s) {mst(dis, 0x3f);mst(dis2, 0x3f);while(!q.empty()) q.pop();dis[s] = 0;q.push(node(0, s));while(!q.empty()) {node tmp = q.top();q.pop();int x = tmp.pos;int p = tmp.dis;if(dis2[x] < p) continue;   //如果p比第二短路都大,那么就可以直接跳过for(int i = head[x]; i; i = edge[i].next) {int y = edge[i].to;int d2 = p + edge[i].dis; //注意松弛操作不能d2 = dis[x] + edge[i].dis;//只能用tmp.dis, 要不然就无法用次短路更新次短路if(d2 < dis[y])     //如果这条路比最短路短 更新最短路dis[y] = d2,q.push(node(dis[y], y));if(dis[y] < d2 && d2<dis2[y])dis2[y] = d2,       //若比最短路长,次短路短,则更新次短路q.push(node(dis2[y], y));   //记得把这个次短路也加入队列}}
}
int main() {cin >> n >> m;for(int i = 1; i <= m; i++) {int u, v, w;cin >> u >> v >> w;add_edge(u, v, w),add_edge(v, u, w);}dijkstra(1);cout << dis2[n] << endl;return 0;
}

POJ3255 Roadblocks ——次短路相关推荐

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

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

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

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

  3. POJ3255(次最短路)

    POJ3255 题意 某街区共有R条道路,N个路口道路可以双向通行.问1号路口到N号路口的次最短路长度是多少?同一条边可以经过多次. dis数组用来求最短路 dis2数组用来求次短路 思路 这道题找的 ...

  4. 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路

    [算法]最短路(spfa) 次短路 [题解] 正反跑两次SPFA,然后枚举每一条边,如果起点到一个端点的最短路+另一个端点到终点的最短路+长度 ≠ 最短路,则和答案比较,保存最小值. #include ...

  5. [Usaco2006 Nov]Roadblocks第二短路

    贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路. 贝茜所在的 ...

  6. POJ 3255 Roadblocks 次短路

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

  7. POJ - 3255 Roadblocks(次短路)

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

  8. 【bzoj1726/Usaco2006 Nov】Roadblocks第二短路——SPFA

    题目链接 分析:题目要求一个连通图的从1到n的严格次短路,我们只需要在跑最短路的时候顺便判一下次短路是否能够被更新即可. dis[x][0]表示1到x的最短路,而dis[x][1]则表示次短路,需要分 ...

  9. POJ-3255 Roadblocks

    求次短路问题,方法类似于求单源最短路,不过本题是将单源最短路和次最短路一块求解   到某一点次最短路(eg:u): 假设最短路为s->v->u , 次短路为 s->v->u' ...

最新文章

  1. 【PHP 每日函数】第 03 周期
  2. char几个字节java_java中的char占几个字节实例分析
  3. 【英语学习】【WOTD】cumulate 释义/词源/示例
  4. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  5. 微软警告:警惕新型勒索软件 PonyFinal,已现身印度、伊朗和美国
  6. 关于用Linux桌面版当工作系统这件事
  7. [转]WCF RIA Services
  8. ubuntupython损坏_Ubuntu上修复Python
  9. windows 安装Rabbit MQ
  10. python的评分卡模型
  11. 冰点下载器的使用方法
  12. IE地址栏发生改变,页面没有刷新而保留在原页面的解决方法
  13. 月老在线牵盲盒/交友盲盒/一元交友/存取小纸条盲盒/分销功能
  14. Verilog设计4位CLA加法器电路,并仿真测试
  15. Oracle 11g中的IO Calibrate(IO校准)
  16. 一篇文章让你了解大数据挖掘技术
  17. linux升级n卡驱动,Centos 7 更新 NVIDIA 驱动
  18. 100元 50元 20元 10元 5元 1元 标准尺寸
  19. 【BZOJ3669】【NOI2014】魔法森林 (spfa动态队列加点算法)
  20. 线性筛求莫比乌斯函数前缀和

热门文章

  1. Serverless:云时代的软件架构核心思想
  2. 详解 Python qrcode 二维码模块
  3. 公众号如何靠互推涨粉
  4. 笔记本电脑移动办公平台网络解决方案
  5. thymeleaf 拼接src路径
  6. 两车相撞的力怎么计算_两车正面碰撞事故车辆行驶速度计算方法
  7. 彻底搭建云笔记(附插件)
  8. DSPE-PEG-DBCO 磷脂-聚乙二醇-二苯并环辛炔 一种线性杂双官能聚乙二醇化试剂
  9. 2021年中国轿车行业现状分析,产销量回升,行业逐渐回暖「图」
  10. 加速度计、陀螺仪工作原理