描述

求1到n的次最短路

开个\(dis[maxn][2]\)的储存距离的二维数组,0储存最短路,1储存次短路

初始化全为正无穷,\(dis[1][0]=0;\)

然后遍历更新时,先尝试更新最短路和次短路,不行就尝试更新次短路;

如果入队的距离已经大于次短路的距离,那么没必要继续,continue;

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
const int inf=999999999;
const int maxn=200009;
struct node{
int to,nxt,w;
}d[maxn];int head[maxn],cnt=1,dis[maxn][3],n,m;
void add(int u,int v,int w){
d[cnt].nxt=head[u],d[cnt].to=v,d[cnt].w=w,head[u]=cnt++;
}
typedef pair<int,int>p;//最短路和顶点编号
void dij(int s)
{
priority_queue<p,vector<p>,greater<p> >q;//默认小的先出来
for(int i=0;i<=n;i++) dis[i][0]=dis[i][1]=inf;
dis[1][0]=0;q.push(p(0,1));
while(!q.empty())
{
p ans=q.top();q.pop();
int lu=ans.first,v=ans.second;
if(dis[v][1]<lu) continue;
for(int i=head[v];i;i=d[i].nxt)
{
node e=d[i];
int dd=lu+e.w;
if(dis[e.to][0]>dd)//更新最短路
{
swap(dis[e.to][0],dd);
q.push(p(dis[e.to][0],e.to));
//如果比最短路短,就把最短路给次短路,dd给最短路
//如果不比次短路短,也会到下一个if去尝试更新次短路
}
if(dis[e.to][1]>dd&&dis[e.to][0]<dd)
{
dis[e.to][1]=dd;
q.push(p(dd,e.to));
}
}
}
cout<<dis[n][1]<<endl;
}
using namespace std;
int main()
{
while(cin>>n>>m)
{
for(int i=1;i<=m;i++)
{
int l,r,w;
cin>>l>>r>>w;
add(l,r,w);add(r,l,w);
}
dij(1);
}
return 0;
}

POJ3255(次最短路)的更多相关文章

  1. poj3255 Roadblocks 次短路

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10098   Accepted: 3620 Descr ...

  2. 【noip 模拟赛curse,light,maze】 题解

    2018.10.16 总结:考的不好 原因: 1.考的时候没状态,读题读不进去 2.考的时候不仔细,该得分没得到 T1:curse 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到 ...

  3. POJ3255次短路

    POJ3255 题意:给定一个图,求从1到n的次短路 分析:我们需要在dijkstra上作出一些修改,首先,到某个顶点v的次短路要么是到其他某个顶点u的最短路在加上u到v的边,要么是到v的次短路再加上 ...

  4. POJ-3255 Roadblocks---Dijkstra队列优化+次短路

    题目链接: https://vjudge.net/problem/POJ-3255 题目大意: 给无向图,求1到n的次短路长度 思路: 由于边数较多,应该使用dijkstra的队列优化 用d数组存储最 ...

  5. POJ3255 Roadblocks [Dijkstra,次短路]

    题目传送门 Roadblocks Description Bessie has moved to a small farm and sometimes enjoys returning to visi ...

  6. 【POJ3255/洛谷2865】[Usaco2006 Nov]路障Roadblocks(次短路)

    题目: POJ3255 洛谷2865 分析: 这道题第一眼看上去有点懵-- 不过既然要求次短路,那估计跟最短路有点关系,所以就拿着优先队列优化的Dijkstra乱搞,搞着搞着就通了. 开两个数组:\( ...

  7. 算法复习———dijkstra求次短路(poj3255)

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

  8. POJ3255 Roadblocks 严格次短路

    题目大意:求图的严格次短路. 方法1: SPFA,同时求单源最短路径和单源次短路径.站在节点u上放松与其向量的v的次短路径时时,先尝试由u的最短路径放松,再尝试由u的次短路径放松(该两步并非非此即彼) ...

  9. 《挑战程序设计竞赛》2.5 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)

    AOJ0189 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0189 题意 求某一办公室到其他办公室的最短距离. 多组输入,n表示 ...

随机推荐

  1. sqli-labs通关----1~10

    最近感觉自己sql注入有点生疏了,想来复习一下,做个记录. 第一关 1.尝试报错我们在1之后加上',根据反馈信息1'后面多了一个'所以我们想办法闭合用 'or 1=1 --+.注意这里#没作用 2.接 ...

  2. Docker常用命令--ps/attach/run

    ps查看container 若查看正在运行的container docker ps 查看所有的container docker ps -a run启动容器 第一次启动container docker ...

  3. C++基础 学习笔记五:重载之运算符重载

    C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...

  4. Vulnhub-dpwwn-01靶机过关记录

    靶机地址:172.16.1.192 Kali 目录扫描 查看info.php 端口扫描 开放3306,尝试弱密码或爆破mysql. 账户为root,密码为空,成功登陆. 查看数据库:再查看ssh表 查 ...

  5. Laravel 5.7 RCE (CVE-2019-9081)

    Laravel 代码审计 环境搭建 Laravel 5.7 文档 : https://learnku.com/docs/laravel/5.7/installation/2242 Composer 下 ...

  6. MVC-基础02

    MVC是Model(模型).View(视图)和Controller(控制). 1)最上面的一层,是直接面向最终用户的"视图层"(View).它是提供给用户的操作界面,是程序的外壳. ...

  7. 文本序列化【通用】word2sequence,文本序列字典保存

    ''' 文本序列化 ''' class WordSequence(): UNK_TAG = "<UNK>" PAD_TAG = "<PAD>&qu ...

  8. Django中MySQL事务的使用

    Django中事物的使用 from django.db import transaction @transaction.atomic通过transaction的@transaction.atomic装 ...

  9. for嵌套setTimeout的心得

    export default { data() { return { dialogList: [] } }, created() { this.setList() }, methods: { setL ...

  10. Adobe Flash player 过期

    完美解决问题的办法,在百度中输入 "adobe flash player debugger",如图进入官网 选择对应操作系统的对应版本,下载安装,重启浏览器,一切ok IE内核浏览 ...