#define _CRT_SECURE_NO_WARNINGS
/*
7 10
0 1 5
0 2 2
1 2 4
1 3 2
2 3 6
2 4 10
3 5 1
4 5 3
4 6 5
5 6 9 4 4
0 1 100
1 3 200
1 2 250
2 3 100
*/
#include <iostream>
#include <functional>
#include <utility>
#include <queue>
#include <vector>
using namespace std; const int maxn = + ;
const int INF = ;
typedef pair<int, int> P; //first-最短距离,second-顶点编号
struct edge
{
int to, cost;
}; //输入
int N, R; //N-点,R-边
vector<edge> G[maxn]; //图的邻接表表示 int dist[maxn]; //最短距离
int dist2[maxn]; //次短距离 void solve()
{
priority_queue<P, vector<P>, greater<P> > que;
fill(dist, dist + N, INF);
fill(dist2, dist2 + N, INF);
dist[] = ;
que.push(P(, )); while (!que.empty())
{
P p = que.top(); que.pop(); //队列存放 (最短路和次短路)
int v = p.second, d = p.first;
if (dist2[v] < d) continue; //如果次小的值小,跳过该值
for (int i = ; i < G[v].size(); i++) {
edge &e = G[v][i]; //得到v的临边
int d2 = d + e.cost; //d2 = 已知最短或次短 + 临边权值
if (dist[e.to] > d2) { //如果未确定的最短路 > d2
swap(dist[e.to], d2);
que.push(P(dist[e.to], e.to)); //添加最短路
}
if (dist2[e.to] > d2 && dist[e.to] < d2) {
dist2[e.to] = d2; //说明d2是次大值
que.push(P(dist2[e.to], e.to)); //添加次短路
}
}
}
printf("%d\n", dist2[N - ]); //N位置的dist2即为
} void input()
{
int from, to, cost;
edge tmp;
for (int i = ; i < R; i++) {
cin >> from >> to >> cost;
tmp.to = to; tmp.cost = cost;
G[from].push_back(tmp);
tmp.to = from;
G[to].push_back(tmp);
}
} int main()
{
cin >> N >> R;
input();
solve();
return ;
}

POJ No.3255 Roadblocks 求次短路径的更多相关文章

  1. POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16425   Accepted: 5797 Descr ...

  2. POJ - 3255 SPFA+邻接表求次短路径

    题意:给出m条边 , n个顶点,u [ i ]到v [ i ] 的距离w [ i ],求除了最短路的那条最短的边的长度. 思路:之前有做过相似的题,使用迪杰斯特拉算法求单源最短路径,并且记录路径,枚举 ...

  3. 【POJ】3255 Roadblocks(次短路+spfa)

    http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...

  4. POJ——T 3255 Roadblocks|| COGS——T 315. [POJ3255] 地砖RoadBlocks || 洛谷—— P2865 [USACO06NOV]路障Roadblocks

    http://poj.org/problem?id=3255 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15680   ...

  5. POJ - 3255 次短路径

    题意:给你无向带权图,求次短路径 题解:加一个次短路的数组,用于距记录源点到此点的次短路长度,注意初始化是源点到自己的次短路是极大值 接着再使用dijkstra算法,它是每次选用现在连上(记录了)的点 ...

  6. POJ3255(Roadblocks)--次短路径

    点这里看题目 3228K 485MS G++ 2453B 根据题意和测试用例知道这是一个求次短路径的题目.次短路径,就是比最短路径长那么一丢丢的路径,而题中又是要求从一点到指定点的次短路径,果断Dij ...

  7. hdu 3191 How Many Paths Are There (次短路径数)

    How Many Paths Are There Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  8. 单源次短路径:poj:3255-Roadblocks

    Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17521 Accepted: 6167 Descripti ...

  9. 次最短路径 POJ 3255 Roadblocks

    http://poj.org/problem?id=3255 这道题还是有点难度 要对最短路径的算法非常的了解 明晰 那么做适当的修改 就可以 关键之处 次短的路径: 设u 到 v的边权重为cost ...

随机推荐

  1. error launching installer-最新版Win 10 解决方案

    error 提示 error launching installer遇到 error的背景 楼主最近重新装了Windows 10 pro 64 bit 版,安装的时候选的地区是United State ...

  2. Node 表单query

    //#使用nodejs编写动态的web服务器//1:加载需要模块 fs http urlconst fs = require("fs");const http = require( ...

  3. 《Effective C#》快速笔记(一)- C# 语言习惯

    目录 一.使用属性而不是可访问的数据成员 二.使用运行时常量(readonly)而不是编译时常量(const) 三.推荐使用 is 或 as 操作符而不是强制类型转换 四.使用 Conditional ...

  4. 软件开的目录规范+sys,os,time模块

    —————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...

  5. Flutter & Dart

    Flutter & Dart https://www.dartlang.org/install https://flutter.dev/ https://flutter.dev/docs/ge ...

  6. Java之List使用方法

    package basic; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; impor ...

  7. BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法

    题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...

  8. MT【5】蝴蝶效应:一道递推式为二次的数列

                                      评:蝴蝶效应[蝴蝶效应(The Butterfly Effect)是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨 ...

  9. Haproxy Mysql cluster 高可用Mysql集群

    -----client-----------haproxy---------mysql1----------mysql2------192.168.1.250 192.168.1.1 192.168. ...

  10. Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作

    当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑.与此同时还有一种更灵活的方法,从asse ...