BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路 Dijkstra
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的第二短路的长度
我们有一个猜想:
依次枚举每一条边,将该边的边权加上起点到该边一点的距离与另一点到终点的最短距离.
依次这样枚举每一条边,比最短路大且最短的一定是第二短路.
Code:
#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 1000000
#define inf 0x7f7f7f7f
using namespace std;
int cnt,s;
int hd[maxn],to[maxn],nex[maxn],val[maxn],d[maxn],vis[maxn],f[maxn],g[maxn];
void add(int u,int v,int c){
nex[++cnt]=hd[u],hd[u]=cnt,to[cnt]=v,val[cnt]=c;
}
struct Edge{
int u,v,c;
Edge(int u=0,int v=0,int c=0):u(u),v(v),c(c){}
}edges[maxn];
struct Node{
int u,dis;
Node(int u=0,int dis=0):u(u),dis(dis){}
bool operator<(Node b)const{
return dis>b.dis;
}
};
priority_queue<Node>Q;
void dijkstra(){
memset(vis,0,sizeof(vis));
for(int i=0;i<maxn;++i) d[i]=inf;
d[0]=d[s]=0;
Q.push(Node(s,d[s]));
while(!Q.empty()){
Node e=Q.top();Q.pop();
if(vis[e.u]) continue;
vis[e.u]=1;
int u=e.u;
for(int i=hd[u];i;i=nex[i]){
if(d[to[i]]>d[u]+val[i]){
d[to[i]]=d[u]+val[i];
Q.push(Node(to[i],d[to[i]]));
}
}
}
}
int main(){
// setIO("input");
int n,m,tot=0,ans=inf,tmp;
scanf("%d%d",&n,&m);
for(int i=1,a,b,c;i<=m;++i) {
scanf("%d%d%d",&a,&b,&c),add(a,b,c),add(b,a,c);
edges[++tot]=Edge(a,b,c),edges[++tot]=Edge(b,a,c);
}
s=1, dijkstra(),tmp=d[n];
for(int i=1;i<=n;++i) f[i]=d[i];
s=n, dijkstra();
for(int i=1;i<=n;++i) g[i]=d[i];
for(int i=1;i<=tot;++i) {
Edge e=edges[i];
if(f[e.u]+val[i]+g[e.v]<ans&&f[e.u]+val[i]+g[e.v]>tmp)
ans=f[e.u]+val[i]+g[e.v];
}
printf("%d\n",ans);
return 0;
}
BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路 Dijkstra的更多相关文章
- Bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路 dijkstra,堆,A*,次短路
1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 969 Solved: 468[S ...
- BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路( 最短路 )
从起点和终点各跑一次最短路 , 然后枚举每一条边 , 更新answer ---------------------------------------------------------------- ...
- BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路
1726: [Usaco2006 Nov]Roadblocks第二短路 Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她 ...
- BZOJ 1726 [Usaco2006 Nov]Roadblocks第二短路:双向spfa【次短路】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1726 题意: 给你一个无向图,求次短路. 题解: 两种方法. 方法一: 一遍spfa,在s ...
- bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路【dijskstra】
严格次短路模板,用两个数组分别维护最短路和次短路,用dijskstra,每次更新的时候先更新最短路再更新次短路 写了spfa版的不知道为啥不对-- #include<iostream> # ...
- 1726: [Usaco2006 Nov]Roadblocks第二短路
1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 835 Solved: 398[S ...
- 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
[算法]最短路(spfa) 次短路 [题解] 正反跑两次SPFA,然后枚举每一条边,如果起点到一个端点的最短路+另一个端点到终点的最短路+长度 ≠ 最短路,则和答案比较,保存最小值. #include ...
- BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路
1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 768 Solved: 369[S ...
- 最短路【bzoj1726】: [Usaco2006 Nov]Roadblocks第二短路
1726: [Usaco2006 Nov]Roadblocks第二短路 Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她 ...
随机推荐
- 防火墙对FTP的影响
http://www.5iadmin.com/post/919.html FTP 常用命令 http://www.cnblogs.com/emanlee/archive/2012/07/09/2583 ...
- 简述synchronized和java.util.concurrent.locks.Lock的异同
1.synchronized 用在方法和代码块的区别? a. 可以只对需要同步的使用 b.与wait(),notify()和notifyall()方法使用比较方便 2.wait() a.释放持有的对象 ...
- [bzoj1861][Zjoi2006]Book 书架_非旋转Treap
Book 书架 bzoj-1861 Zjoi-2006 题目大意:给你一个序列,支持:将指定编号的元素抽出,放到序列顶(底):将指定编号元素左右篡位:查询指定编号元素位置:查询指定数量位置元素编号. ...
- 《coredump问题原理探究》Linux x86版7.7节 set对象
看一下bits/stl_map和bits/stl_set能够看到map和set的定义例如以下: 84 template <typename _Key, typename _Tp, typenam ...
- 【软件project】之第五、六章总结
软件project的前几章各自是软件计划.需求分析.软件设计.整体的都规划好了以后,就该着手去实践了. 所谓的理论体系足够强大了以后,实践就显得尤为轻松.我们设计软件,实践当然就是用我已经计划好的语言 ...
- GIS+=地理信息+容器技术(1)——容器技术概述
-------------------------------------------------------------------------------------- Blog: http ...
- HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
pid=5358">HDU 5358 题意: 求∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...
- RecyclerView的使用(1)之HelloWorld
原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴随Android 5.0公布的新控件, ...
- 推送_即时推送_即时通讯_在线Demo
[伊尚]美容店(万达店)找创业合伙人(限女生) 点击查看Demo 线上预览 运行Demo截图如下: 线上预览
- 【cl】java变量
知识点一: 变量:有声明,有初始化! 变量作用域:变量在声明的地方开始,到块结束(其中一对{}叫块) 变量不能重复声明(声明=定义):在同一个作用域中不能重复声明变量! 在作用域中如果已经有变量了,就 ...