Roadblocks

直接翻译了

Descriptions

Bessie搬到了一个新的农场,有时候他会回去看他的老朋友。但是他不想很快的回去,他喜欢欣赏沿途的风景,所以他会选择次短路,因为她知道一定有一条次短路。
这个乡村有R(1<=R<=100000)条双向道路,每一条连接N(1<=N<=5000)个点中的两个。Bessie在1号节点,他的朋友家是n号节点Input第一行:两个整数N和R
接下来R行:每行包含三个整数,A,B,D,表示一条连接A与B的长度为D的路径Output输出1到n的次短路

Sample Input

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

Sample Output

450

Hint

两条路线:1 - > 2 - > 4(长度100 + 200 = 300)和1 - > 2 - > 3 - > 4(长度100 + 250 + 100 = 450)
题目链接
 

求从s到t的次短路径有两种情况:1、起点s到某个顶点u的最短路+d(u,t)。2、起点到某个顶点u的次短路+d(u,t)。

所以更新路径的时候需要把最短路径和次短路径两个都记录下来。

AC代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0)
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 5000+5
#define P pair<int,int>//first最短路径second顶点编号
using namespace std;
int N,R;
struct edge
{
    int to,dis;
    edge(int to,int dis):to(to),dis(dis) {}
};
vector<edge>G[Maxn];//G[i] 从i到G[i].to的距离为dis
int d[Maxn][Maxn];//d[i][j]从i到j的最短距离
int d2[Maxn][Maxn];//d[i][j]从i到j的次短距离
void Dijk(int s)
{
    priority_queue<P,vector<P>,greater<P> >q;//按first从小到大出队
    ; i<=N; i++)//初始化s到所有地方的最短路,次短路都是inf
        d[s][i]=INF,d2[s][i]=INF;
    d[s][s]=;
    q.push(P(,s));
    while(!q.empty())
    {
        P p=q.top();
        q.pop();
        int v=p.second;//点v
        if(d2[s][v]<p.first)//大于次短路径,肯定会大于最短路径,不用管他了
            continue;
        ; i<G[v].size(); i++)
        {
            edge e=G[v][i];//枚举与v相邻的点
            int td=p.first+e.dis;//s到v的距离+v到e.to的距离
            if(d[s][e.to]>td)//s到e.to的最短路小于dt,更新d[s][e.to]
            {
                swap(d[s][e.to],td);
                q.push(P(d[s][e.to],e.to));
            }
            if(d[s][e.to]<td&&d2[s][e.to]>td)//td大于最短路,小于次短路,即td可以替换次短路
            {
                d2[s][e.to]=td;
                q.push(P(d2[s][e.to],e.to));
            }
        }
    }
}
int main()
{
    IOS;
    cin>>N>>R;
    ; i<R; i++)
    {
        int u,v,d;
        cin>>u>>v>>d;
        G[u].push_back(edge(v,d));
        G[v].push_back(edge(u,d));
    }
    Dijk();//城市1到各个城市的最短距离,次短路
    cout<<d2[][N]<<endl;
    ;
}

【POJ - 3255】Roadblocks(次短路 Dijkstra算法)的更多相关文章

  1. POJ 3255 Roadblocks (次级短路问题)

    解决方案有许多美丽的地方.让我们跳回到到达终点跳回(例如有两点)....无论如何,这不是最短路,但它并不重要.算法能给出正确的结果 思考:而最短的路到同一点例程.spfa先正达恳求一次,求的最短路径的 ...

  2. poj 3255 Roadblocks 次短路(两次dijksta)

    Roadblocks Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...

  3. POJ 3255 Roadblocks (次短路 SPFA )

    题目链接 Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...

  4. POJ 3255 Roadblocks (次短路)

    题意:给定一个图,求一条1-n的次短路. 析:次短路就是最短路再长一点呗,我们可以和求最短路一样,再多维护一个数组,来记录次短路. 代码如下: #pragma comment(linker, &quo ...

  5. 单源最短路dijkstra算法&amp;&amp;优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...

  6. 最短路Dijkstra算法的一些扩展问题

    最短路Dijkstra算法的一些扩展问题     很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...

  7. POJ 3255 Roadblocks(A*求次短路)

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12167   Accepted: 4300 Descr ...

  8. POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。

    POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...

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

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

  10. 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)

    Silver Cow Party Descriptions 给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x, ...

随机推荐

  1. C语言文法分析

    程序 → <外部声明>|<程序><外部声明> <外部声明> → <函数定义> | <声明> <函数定义> → < ...

  2. XSS 跨站脚本攻击之构造剖析(一)

    1.XSS-Filter:跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击 (1)XSS Filter实际上是一段精心编写的过滤函数作用是过滤XSS跨站脚本代码: (2)绕过XSS F ...

  3. Python-实现对表插入百万条数据

    新手小白写的,我自己都不知道对不对,先写下来记着,以后掌握更多Python知识后,再来看下写的对不对. 题目:造一百万条大学生的基本信息(学校.专业.姓名.学号) 分析思路:利用Python的MySQ ...

  4. 关于IntentFilter的几点注意事项:

    http://blog.csdn.net/cnnumen/article/details/8464786 IntentFilter就是用于描述intent的各种属性, 比如action, catego ...

  5. 封装smarty类

    <?php/** * Project:     Smarty: the PHP compiling template engine * File:        Smarty.class.php ...

  6. c#中winform的MVP模式的简单实现

    MVP模式是类似于MVC模式的一种设计模式,最近在做项目学习过程中遇到,弄了很久终于有一些眉目,这是学习过程中的一些笔记.MVP指的是实体对象Model.视图Viw和业务处理Presenter.MVP ...

  7. redis 应用

    前段使用JQueryMobile进行展示. 实现了用户注册,登陆,列表基本功能 非常简洁. 如果想了解Redis存储,Express的处理可以提供一些基础的示范. 下载地址: https://gith ...

  8. css3学习01

    1.圆角边框(div的一个属性:border-radius) <!DOCTYPE html> <html> <head> <style> div { t ...

  9. SQL Server 2016 行级别权限控制

    背景 假如我们有关键数据存储在一个表里面,比如人员表中包含员工.部门和薪水信息.只允许用户访问各自部门的信息,但是不能访问其他部门.一般我们都是在程序端实现这个功能,而在sqlserver2016以后 ...

  10. 长整形的使用及cin加速

    _int64 和 long long 那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了.其实方式只有有限的几种: 如果服务器是linux系统,那么定义用long long,IO ...