单源次短路径:poj:3255-Roadblocks
Roadblocks
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 17521 Accepted: 6167
Description
Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She has decided to take the second-shortest rather than the shortest path. She knows there must be some second-shortest path.
The countryside consists of R (1 ≤ R ≤ 100,000) bidirectional roads, each linking two of the N (1 ≤ N ≤ 5000) intersections, conveniently numbered 1..N. Bessie starts at intersection 1, and her friend (the destination) is at intersection N.
The second-shortest path may share roads with any of the shortest paths, and it may backtrack i.e., use the same road or intersection more than once. The second-shortest path is the shortest path whose length is longer than the shortest path(s) (i.e., if two or more shortest paths exist, the second-shortest path is the one whose length is longer than those but no longer than any other path).
Input
Line 1: Two space-separated integers: N and R
Lines 2..R+1: Each line contains three space-separated integers: A, B, and D that describe a road that connects intersections A and B and has length D (1 ≤ D ≤ 5000)
Output
Line 1: The length of the second shortest path between node 1 and node N
Sample Input
4 4
1 2 100
2 4 200
2 3 250
3 4 100
Sample Output
450
Hint
Two routes: 1 -> 2 -> 4 (length 100+200=300) and 1 -> 2 -> 3 -> 4 (length 100+250+100=450)
解题心得:
- 提议就是给你一个无向图,叫你求出第1点到第n点的次短路径。
- 最短路径很好求,方法也很多,其实次短路径也很好求,就拿dij来说,每次维护的都是一个最小值,那么次短路径就可以在最小值之上维护一个和最小值差值最小的值。
- 到某个顶点v的次短路要么是到其他某个顶点u的最短路加上u到v的边,要么是到u的次短路加上u到v的边。因此所需要求的就是到所有顶点的最短路和次短路。
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int,int> P;
const int maxn = 5010;
vector <P> ve[maxn];
int n,m,dis[maxn],dis2[maxn];
priority_queue <P ,vector<P>,greater<P> > qu;
void init() {
memset(dis,0x3f,sizeof(dis));
memset(dis2,0x3f,sizeof(dis2));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v,va;
scanf("%d%d%d",&u,&v,&va);
ve[u].push_back(make_pair(va,v));
ve[v].push_back(make_pair(va,u));
}
dis[1] = 0;
qu.push(make_pair(0,1));
}
void dij() {
while(!qu.empty()) {
P now = qu.top();
qu.pop();
int u = now.second;
int d = now.first;
if(dis2[u] < d)
continue;
for(int i=0;i<ve[u].size();i++){
int v = ve[u][i].second;
int d2 = d + ve[u][i].first;
if(d2 < dis[v]) {
swap(dis[v],d2);
qu.push(make_pair(dis[v],v));
}
if(d2 > dis[v] && d2 < dis2[v]) {
dis2[v] = d2;
qu.push(make_pair(d2,v));
}
}
}
return ;
}
int main() {
init();
dij();
printf("%d\n",dis2[n]);
return 0;
}
单源次短路径:poj:3255-Roadblocks的更多相关文章
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- POJ 3255 Roadblocks(A*求次短路)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12167 Accepted: 4300 Descr ...
- 次最短路径 POJ 3255 Roadblocks
http://poj.org/problem?id=3255 这道题还是有点难度 要对最短路径的算法非常的了解 明晰 那么做适当的修改 就可以 关键之处 次短的路径: 设u 到 v的边权重为cost ...
- POJ 3255 Roadblocks (次短路 SPFA )
题目链接 Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...
- POJ 3255 Roadblocks (次级短路问题)
解决方案有许多美丽的地方.让我们跳回到到达终点跳回(例如有两点)....无论如何,这不是最短路,但它并不重要.算法能给出正确的结果 思考:而最短的路到同一点例程.spfa先正达恳求一次,求的最短路径的 ...
- POJ 3255 Roadblocks --次短路径
由于次短路一定存在,则可知次短路一定是最短路中某一条边不走,然后回到最短路,而且只是一条边,两条边以上不走的话,就一定不会是次短路了(即以边换边才能使最小).所以可以枚举每一条边,算出从起点到这条边起 ...
- poj 3255 Roadblocks 次短路(两次dijksta)
Roadblocks Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total S ...
- POJ 3255 Roadblocks (次短路模板)
Roadblocks http://poj.org/problem?id=3255 Time Limit: 2000MS Memory Limit: 65536K Descriptio ...
- poj 3255 Roadblocks
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13216 Accepted: 4660 Descripti ...
随机推荐
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...
- The twentieth day
Knowledge is power 知识就是力量 You're unique,nothing can replace you.你举世无双,无人可以替代.
- Angular2、4入门基础知识(小的概念)
1. 使用引用符来格式化HTML代码. @Component({ selector: 'app-heroes', templateUrl: './heroes.component.html', sty ...
- Cmake 01
1. sdsf(single direction single file) 1.1 The directory tree /* ./template | +--- build | +---main. ...
- 关于Content-Type: multipart/form-data的支持
关于Content-Type: multipart/form-data的支持 发布于 537天前 作者 yzhang226 303 次浏览 复制 上一个帖子 下一个帖子 标签: 无 今天 ...
- 问题 A: E2 驾驭const
题目描述 引入了const关键词,用于指定“常”对象及“常”对象成员,提供了对数据的一种保护机制,这C++语言的特色之一.但由此,也引出了一些语法上的要求.这些语法要求,实际上有一套完善的原则,需要熟 ...
- javaweb基础(35)_jdbc处理oracl大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- git 提交 src refspec master does not match any
git init 产生的目录解释 error: src refspec master does not match any. 引起该错误的原因是,目录中没有文件,空目录是不能提交上去的 error ...
- CSS font-size字体大小样式属性
设置字体大小CSS单词与语法 基本语法结构: .divcss5{font-size:12px;}设置了文字大小为12px像素Font-size+字体大小数值+单位 单词:font-size语法:fon ...
- IE 8 下小心使用console.log()
我们很多情况下会使用console.log() 对代码调试.在chrome下和Firefox下都不会有太大问题,但是在最近我在IE8 下调试时使用了console.log(),就出现一些问题.在IE8 ...