poj-3255-Roadblocks-路径可重复次短路
题目:
- Roadblocks
- Time Limit: 2000MS Memory Limit: 65536K
- Total Submissions: 7075 Accepted: 2629
- 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, 输出仅次于 最短路的次短路, 路径可重复走。
思路:正反求两遍最短路,得出1 到所有点的最短距离, 和 n到所有点的最短距离。因为路径可以重复走,所以两点之间只有一条边的可以重复经过。接着将每条边视作单项边,枚举每条单项边e(u, v),Dist = dist(1, u) + dist(n, v) + dist(u,v).这样只会重复一条最小边。所求得的 大于 dist(1, n)的最小的Dist,就是题目的解。(理解不了的画一下图就明白了)
AC代码:
- #include<cstdio>
- #include<iostream>
- #include<queue>
- #include<vector>
- #include<algorithm>
- #include<cstring>
- #include<climits>
- using namespace std;
- #define maxn 100009
- #define INF INT_MAX-100000
- struct Edge
- {
- int from, to, dist;
- };
- struct Heapnode
- {
- int d, u;
- bool operator < (const Heapnode& that) const {
- return d > that.d;
- }
- };
- int dist1[maxn], dist2[maxn];
- struct Dijkstra
- {
- int n, m;
- vector<Edge> edges;
- vector<int> G[maxn];
- bool done[maxn];
- int d[maxn];
- int p[maxn];
- void init(int n) {
- this->n = n;
- for(int i = ; i < n; i++) G[i].clear();
- edges.clear();
- }
- void AddEdge(int from, int to , int dist) {
- edges.push_back((Edge) {from, to , dist});
- m = edges.size();
- G[from].push_back(m-);
- }
- void dijkstra(int s, int* dx) {
- priority_queue<Heapnode> Q;
- for(int i = ; i < n; i++) dx[i] = d[i] = INF;
- d[s] = dx[s] = ;
- memset(done, , sizeof(done));
- Q.push((Heapnode) {, s});
- while(!Q.empty()) {
- Heapnode x = Q.top(); Q.pop();
- int u = x.u;
- if(done[u]) continue;
- done[u] = true;
- int size = G[u].size();
- for(int i = ; i < size; i++) {
- Edge& e = edges[G[u][i]];
- if(d[e.to] > d[u] + e.dist) {
- dx[e.to] = d[e.to] = d[u] + e.dist;
- p[e.to] = G[u][i];
- Q.push ((Heapnode) {d[e.to], e.to});
- }
- }
- }
- }
- }dij;
- void work(int n, int r)
- {
- dij.init(n+);
- for(int i = ; i < r; i++){
- int a, b, c; scanf("%d%d%d", &a, &b, &c);
- dij.AddEdge(a, b, c);
- dij.AddEdge(b, a, c);
- }
- dij.dijkstra(, dist1);
- dij.dijkstra(n, dist2);
- int Dist, sta = dist1[n], res = INF;
- for(int i = ; i <= n; i++){
- int ss = dij.G[i].size();
- for(int j = ; j < ss; j++){
- int m = dij.G[i][j];
- Edge ee = dij.edges[m];
- Dist = dist1[ee.from] + dist2[ee.to] + ee.dist;
- if(Dist < res && Dist > dist1[n]) res = Dist;
- //cout<<Dist<<" "<<res<<endl;
- }
- }
- printf("%d\n", res);
- }
- int main()
- {
- int n, r;
- while(scanf("%d%d", &n, &r) != EOF){
- work(n, r);
- }
- return ;
- }
poj-3255-Roadblocks-路径可重复次短路的更多相关文章
- POJ 3255 Roadblocks(A*求次短路)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12167 Accepted: 4300 Descr ...
- POJ 3255 Roadblocks (次级短路问题)
解决方案有许多美丽的地方.让我们跳回到到达终点跳回(例如有两点)....无论如何,这不是最短路,但它并不重要.算法能给出正确的结果 思考:而最短的路到同一点例程.spfa先正达恳求一次,求的最短路径的 ...
- 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 --次短路径
由于次短路一定存在,则可知次短路一定是最短路中某一条边不走,然后回到最短路,而且只是一条边,两条边以上不走的话,就一定不会是次短路了(即以边换边才能使最小).所以可以枚举每一条边,算出从起点到这条边起 ...
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- POJ 3255 Roadblocks (次短路 SPFA )
题目链接 Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...
- POJ 3255 Roadblocks (次短路)
题意:给定一个图,求一条1-n的次短路. 析:次短路就是最短路再长一点呗,我们可以和求最短路一样,再多维护一个数组,来记录次短路. 代码如下: #pragma comment(linker, &quo ...
- 次最短路径 POJ 3255 Roadblocks
http://poj.org/problem?id=3255 这道题还是有点难度 要对最短路径的算法非常的了解 明晰 那么做适当的修改 就可以 关键之处 次短的路径: 设u 到 v的边权重为cost ...
- poj 3255 Roadblocks
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13216 Accepted: 4660 Descripti ...
随机推荐
- 设置图片自适应DIV大小
可以利用CSS样式表中表示后代的复合选择器进行设置.例: <head> <style type="text/css"> #right img /*设定box ...
- idea新建项目完整过程
参看下面博客 http://www.cnblogs.com/cnjava/archive/2013/01/29/2881654.html 突然,感觉idea其实挺麻烦的: 一.junit test做起 ...
- Leetcode#117 Populating Next Right Pointers in Each Node II
原题地址 二叉树的层次遍历. 对于每一层,依次把各节点连起来即可. 代码: void connect(TreeLinkNode *root) { if (!root) return; queue< ...
- vs2010 使用IIS EXPRESS出错.
出现的问题: 解决方法: 左键单击Web项目, 查看属性选项卡, 将 托管管道模式改成Classic就可以了.
- HTTP状态码一览表(HTTP Status Code)
copy from:http://www.189works.com/article-43064-1.html 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 ( ...
- Sqli-labs less 56
Less-56 与less54.55形式是一致的,我们关注sql语句, $sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0 ...
- 【linux】文字提取
提取IP地址: 方法①: ifconfig eth3|grep Bcast|cut -d ":" -f2|cut -d " " -f1 ifconfig: 显示 ...
- 这个东西,写C++插件的可以用到。 RapidJSON —— C++ 快速 JSON 解析器和生成器
点这里 原文: RapidJSON —— C++ 快速 JSON 解析器和生成器 时间 2015-04-05 07:33:33 开源中国新闻原文 http://www.oschina.net/p/ ...
- java 驼峰命名
jstl中前台jsp页面调用对象中的属性时, 用的是小驼峰命名法. 例如:${item.createTime} 1.小驼峰式命名法(lower camel case): 第一个单字以小写字母开始,第二 ...
- intelli IDEA node开发代码提示问题
好几天没写代码了,今天新建一个项目,在引入rs这个文件系统模块时却没有关于这个模块的代码提示,着实令人恶心啊.还好最终解决了. 在没有代码提示的时候点击如下图标: 出现如下的界面,其中有个Edit u ...