1726: [Usaco2006 Nov]Roadblocks第二短路

Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1277  Solved: 607 [Submit][Status][Discuss]

Description

贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友。贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路。 贝茜所在的乡村有R(1<=R<=100,000)条双向道路,每条路都联结了所有的N(1<=N<=5000)个农场中的某两个。贝茜居住在农场1,她的朋友们居住在农场N(即贝茜每次旅行的目的地)。 贝茜选择的第二短的路径中,可以包含任何一条在最短路中出现的道路,并且,一条路可以重复走多次。当然咯,第二短路的长度必须严格大于最短路(可能有多条)的长度,但它的长度必须不大于所有除最短路外的路径的长度。

Input

* 第1行: 两个整数,N和R,用空格隔开

* 第2..R+1行: 每行包含三个用空格隔开的整数A、B和D,表示存在一条长度为 D(1 <= D <= 5000)的路连接农场A和农场B

Output

* 第1行: 输出一个整数,即从农场1到农场N的第二短路的长度

Sample Input

4 4
1 2 100
2 4 200
2 3 250
3 4 100

Sample Output

450

输出说明:

最短路:1 -> 2 -> 4 (长度为100+200=300)
    第二短路:1 -> 2 -> 3 -> 4 (长度为100+250+100=450)

次短路模板题
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char buf[10000000], *ptr = buf - 1;
inline int readint(){int n = 0;char ch = *++ptr;while(ch < '0' || ch > '9') ch = *++ptr;while(ch <= '9' && ch >= '0'){n = (n << 1) + (n << 3) + ch - '0';ch = *++ptr;}return n;
}
const int maxn = 5000 + 10, maxm = 100000 + 10;
struct Edge{int to, val, next;Edge(){}Edge(int _t, int _v, int _n): to(_t), val(_v), next(_n){}
}e[maxm * 2];
int fir[maxn] = {0}, cnt = 0;
inline void ins(int u, int v, int w){e[++cnt] = Edge(v, w, fir[u]); fir[u] = cnt;e[++cnt] = Edge(u, w, fir[v]); fir[v] = cnt;
}struct Node{int dis, idx;Node(){}Node(int _d, int _i): dis(_d), idx(_i){}bool operator < (const Node &x) const {return dis > x.dis;}
}t;
priority_queue<Node> q;
int dis1[maxn], dis2[maxn];
void dijkstra(){memset(dis1, 0x3f, sizeof dis1);memset(dis2, 0x3f, sizeof dis2);dis1[1] = 0;q.push(Node(0, 1));int u, v, w;while(!q.empty()){t = q.top(); q.pop();u = t.idx;if(t.dis > dis2[u]) continue;for(int i = fir[u]; i; i = e[i].next){v = e[i].to;w = t.dis + e[i].val;if(dis1[v] > w){swap(dis1[v], w);q.push(Node(dis1[v], v));}if(dis1[v] < w && w < dis2[v]){dis2[v] = w;q.push(Node(dis2[v], v));}}}
}
int n, m;
int main(){fread(buf, sizeof(char), sizeof(buf), stdin); n = readint();m = readint();for(int u, v, w, i = 1; i <= m; i++){u = readint();v = readint();w = readint();ins(u, v, w);}dijkstra();printf("%d\n", dis2[n]);return 0;
}

转载于:https://www.cnblogs.com/ruoruoruo/p/7486995.html

[BZOJ1726][Usaco2006 Nov]Roadblocks第二短路相关推荐

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

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

  2. [Usaco2006 Nov]Roadblocks第二短路

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

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

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

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

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

  5. [BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板

    1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1272  Solved: ...

  6. 1724: [Usaco2006 Nov]Fence Repair 切割木板( 贪心 )

    倒过来看 , 每次总是选择最短的两块木板合并 , 用heap维护 ------------------------------------------------------------------- ...

  7. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)

    BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Description 正如你所知 ...

  8. BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板

    题目 1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farmer ...

  9. bzoj 1662: [Usaco2006 Nov]Round Numbers 圆环数(枚举)

    1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 413  Solved: 2 ...

最新文章

  1. nginx视频直播/点播服务干货分享
  2. 0218 图片的添加
  3. php 的函数参数值类型限定
  4. 数据挖掘十大经典算法之——KNN 算法
  5. 转:ASP.Net下两种全局变量的设置和读取方法
  6. Linux 串口编程一 一些背景
  7. ubuntu-18.04 修改用户名密码
  8. 【Java】基于分子式求分子量
  9. 2021年河南高考成绩排名查询一分一段表,2021年河南高考文科一分一段表,河南一分一段表文科位次排名查询...
  10. 科学宿命论-我们到底有没有自由意志
  11. javascript Date object
  12. CMake的简单使用
  13. 《神经网络和深度学习》系列文章七:实现我们的神经网络来分类数字(上)...
  14. winform:關於画非客户区
  15. HDU2516 取石子游戏
  16. win10设置电池养护模式
  17. php 生成单色位图,使用PHP实现将jpg/png转成.wbmp/.bmp格式图片后再转为16进制字符串(单色位图取模)...
  18. 判断电路是正反馈还是负反馈,电流反馈还是电压反馈
  19. eclipse 3.7(indigo)在线安装中文语言包
  20. matplotlib绘制多维度分类散点图

热门文章

  1. Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
  2. chromedriver链接
  3. 中高级JavaScript易错面试题
  4. Jzoj4782 Math
  5. 【转】Linux如何在系统启动时自动加载模块
  6. Linq表达式和Lambda表达式用法对比
  7. 读书笔记 - 《乌合之众》
  8. Android应用中Back键的监听及处理
  9. 使用.Net 1.1的项目,TreeView控件不能正常显示
  10. linux shell 脚本 supress,《linux Shell 脚本攻略》进阶学习(第一部分)