次短路

2023-05-16

次短路

概念:次短路是相对于最短路的,简单来说就是第二短的路径。

方法: d i j k s t r a dijkstra dijkstra 找最短路的同时,维护一个次短路数组( d i s t 2 [ ] dist2[] dist2[])。

  1. 当 (到达目的节点的最短路) > > > (从队列中取出的值 + 当前点到目的点的距离)即 d i s t [ v ] > d + E [ n o w ] [ i ] . c o s t dist[v] > d + E[now][i].cost dist[v]>d+E[now][i].cost,则更新最短路和次短路, 即
    d i s t 2 [ v ] = d i s t [ v ] ; dist2[v] = dist[v]; dist2[v]=dist[v];
    d i s t [ v ] = d + E [ n o w ] [ i ] . c o s t ; dist[v] = d + E[now][i].cost; dist[v]=d+E[now][i].cost;
  2. 当 (到达目的节点的最短路) &lt; &lt; < (从队列中取出的值 + 当前点到目的点的距离) &lt; &lt; < (到达目的节点的次短路),只更新次短路,即
    d i s t 2 [ v ] = d + E [ n o w ] [ i ] . c o s t ; dist2[v] = d + E[now][i].cost; dist2[v]=d+E[now][i].cost;
    注意:每次更新结束后都需要加入队列。

放 道 水 题 A C 代 码 放道水题AC代码 AC

// poj - 2355  Roadblocks
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 5100;

struct edge {
    int to, cost;
    bool operator < (const edge &d) const{
        return cost > d.cost;
    }
};

std::vector<edge > E[MAXN];
void add_edge(int u, int v, int c) {
    E[u].push_back((edge){v, c});
}

int N, R, a, b, d;

int dist[MAXN];
int dist2[MAXN];
int dijkstra(int s) {
    memset(dist, INF, sizeof(dist));
    fill(dist2, dist2+N, INF);
    priority_queue<edge > pq;
    dist[s] = 0;
    pq.push((edge){s, dist[s]});
    while(!pq.empty()) {
        int now = pq.top().to;
        int d = pq.top().cost;
        pq.pop();
        if(dist2[now] < d) continue;
        for (int i = 0; i < E[now].size(); ++i) {
            int v = E[now][i].to;
            int d2 = d + E[now][i].cost;
            if(dist[v] > d2) {
                dist2[v] = dist[v];
                dist[v] = d2;
                pq.push((edge){v, dist[v]});
            }
            else if(dist[v] < d2) {
                if(dist2[v] > d2) {
                    dist2[v] = d2;
                    pq.push((edge){v, dist2[v]});
                }
            }
        }
    }
}

int main(int argc, char const *argv[])
{
    cin>>N>>R;
    for (int i = 0; i < R; ++i) {
        cin>>a>>b>>d;
        add_edge(a, b, d);
        add_edge(b, a, d);
    }
    dijkstra(1);
    cout<<dist2[N]<<endl;
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

次短路 的相关文章

  • 【Java】面试代码题 多线程

    CONTENT 1 实现一个死锁 快手一面8 11实现一实现二 xff08 提取相同逻辑更简洁 xff09 2 两个线程交替打印 0 1003 三个线程交替打印 xff0c 线程0打印零 xff0c 线程1打印奇数 xff0c 线程0打印0
  • 【二叉树】前、中、后 序遍历(递归+迭代)

    CONTENT leetcode 练习题目二叉树定义1 先序遍历递归迭代直接做法标记法 2 中序遍历递归迭代直接做法标记法 3 后序遍历递归迭代直接做法标记法反转类前序遍历结果 Reference leetcode 练习题目 144 二叉树
  • 【Java】代理模式(静态代理&动态代理)

    CONTENT 代理模式静态代理动态代理JDK 动态代理 xff08 基于接口 xff09 CGLIB 动态代理 xff08 基于类继承 xff09 JDK 动态代理 v s CGLIB 动态代理JDK 动态代理为什么必须基于接口 Refe
  • 【Java】面试代码题 手写 HashMap(参考 JDK7 拉链头插法实现)

    这是一个参考 JDK7 实现的非常简单的 HashMap xff0c 只实现了最最基础的 get put remove containsKey 方法 解决冲突用的是最简单的拉链法 xff0c hash 用的是 JDK 自带的 hashCod
  • Win10微信查看图片卡顿或发送图片卡顿的原因和解决方法

    1 引言 我是Windows11系统 xff0c 本篇文章同样适用于Windows10 该现象包括点击放大查看pc端微信中别人发送的图片会卡顿 在微信中发送图片时会卡顿 拖动图片或其他文件至微信聊天窗口发送时会卡顿 卡顿的表现为pc端微信无
  • 【lombok @Slf4j】报错 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.

    CONTENT 事件来源具体报错原因解决Reference 事件来源 正常 用 SLF4J 写 log xff0c 每次写新的类 xff0c 就需要重新写 logger xff0c 非常麻烦 span class token keyword
  • 【Java】JDK 7 HashMap 头插法在并发情况下的成环问题

    CONTENT 问题描述成因详解总结Reference 问题描述 JDK 7 的 HashMap 解决冲突用的是拉链法 xff0c 在拉链的时候用的是头插 xff0c 每次在链表的头部插入新元素 resize 的时候用的依然是头插 xff0
  • Uva-11768 Lattice Point or Not题解

    知识 xff1a 扩展gcd 题目 xff1a 题目链接 Now a days a very common problem is The coordinate of two points in Cartesian coordinate sy
  • CodeForces - 225B题解

    知识 xff1a 无 题目 xff1a CodeForces 225B链接 Numbers k bonacci k is integer k gt 1 are a generalization of Fibonacci numbers an
  • HDU 2177 取(2堆)石子游戏题解

    知识 xff1a 博弈论 威佐夫博弈 xff08 Wythoff Game xff09 题目 xff1a HDU 2177 链接 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次
  • 浙江省赛2015 _ L _ ZOJ 3880

    水题 题目 xff1a ZOJ 3880 There is a popular multiplayer online battle arena game called Demacia of the Ancients There are lo
  • 浙江省赛2015 _ J - Convert QWERTY to Dvorak -> ZOJ 3878

    模拟水题 题目 xff1a ZOJ 3878 Edward a poor copy typist is a user of the Dvorak Layout But now he has only a QWERTY Keyboard wi
  • 浙江省赛2015 _ G - Lunch Time -> ZOJ - 3875

    水题 这道题比赛当时没有做出来 原因是 ends xff0c C 43 43 对ends的处理是在缓冲区插入 0 然后刷新 xff0c 而不是空格 xff0c 能输出空格是因为Windows对 0 默认的处理方式是输出一个空格 xff0c
  • 贪心算法

    算法导引 xff1a 问题 xff1a 有1元 5元 10元 100元 500元的硬币 xff08 假设所有面值硬币都足够 xff09 现在要找给顾客620元 xff0c 最少需要多少枚硬币 xff1f xff08 改编自挑战程序设计竞赛
  • 蓝桥杯_PREV-34_矩阵翻硬币

    题目 xff1a 矩阵翻硬币 链接 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵 随后 xff0c 小明对每一个硬币分别进行一次 Q 操作 对第x行第y列的硬币进行 Q 操作的定义 xff1a 将所有第 i x 行 xff0c 第
  • ONL(open network linux) from OCP

    https opennetlinux org github xff1a https github com OpenComputeProject OpenNetworkLinux Open Network Linux is a Linux d
  • C++ string数组注意事项

    string xff1a 经实践string数组 xff0c 如string s 10100 xff0c 不能使用s j k 61 这种方法赋值 具体原因未知 求教为什么 xff1f
  • CodeForces - 954C - Matrix Walk

    坑题 题目 xff1a CodeForces 954C 题意 矩阵的每一元素可以用 Ai j 61 y i 1 43 j 来表示 xff0c xff08 就是二维数组用一维指针表示的方法 xff09 xff0c 给你一个路径序列 xff0c
  • Mathjex练习

    u k i 61 a k i k 1 j 61 1 l k j u j i u k i 61
  • 转载:全排列与next_permutation

    转载声明 xff1a 来自https blog csdn net yingyujianmo article details 52046398 感谢作者的讲解 全排列是面试笔试过程中经常遇到的一个问题 对于练习过的同学来说 xff0c 这个问

随机推荐

  • 转载:如何快速转载CSDN中的博客

    转载声明 xff1a 来自https blog csdn net bolu1234 article details 51867099 感谢作者的分享 前言 对于喜欢逛CSDN的人来说 xff0c 看别人的博客确实能够对自己有不小的提高 xf
  • Matlab日记

    Matlab中对clear函数赋值后如何清除变量 xff1f 方法很多 xff0c 一般用 builtin clear b u i l t i n 执 行 内 建 的 函 数 b u i l
  • QT_Windows_命令行下编译,发布

    本文所使用到的资源链接 xff1a 1 所有QT版本镜像下载 2 单文件制作封装工具Engima Virtual Box 环境配置 xff1a 报如下错 xff0c 参考这个 在我这里是因为 xff1a 系统的环境变量的目录中有几个版本不同
  • 容斥原理详解

    翻译 xff1a vici 64 cust 对容斥原理的描述 容斥原理是一种重要的组合数学方法 xff0c 可以让你求解任意大小的集合 xff0c 或者计算复合事件的概率 描述 容斥原理可以描述如下 xff1a 要计算几个集合并集的大小 x
  • 2018ACM/ICPC全国邀请赛(江苏) 总结

    抱憾打铁 整理了一下今天的思路 xff0c 记录如下 开始时我先开的A题 xff0c 我感觉是模拟 xff0c 和lqs讨论了一下 xff0c 感觉会T xff0c 就想其他方法了 开始wjj开的B xff0c 他说感觉是推个公式 xff0
  • HDU 1002 Java大数

    题意很简单输出 a 43 b a 43 b 只不过 a a 和 b b 都很大 xff0c 需要处理大数问题 Java大数解决方法 xff0c 详见代码 xff1a import java io import java util impor
  • broadcom OF-DPA

    https www broadcom com products ethernet connectivity software of dpa http broadcom switch github io of dpa doc html OFD
  • 【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition...

    Spatial Temporal Graph Convolutional Networks for Skeleton Based Action Recognition 2018 01 28 15 45 13 研究背景和动机 xff1a 行人
  • Windows下GCC编译环境中文乱码解决方案

    转载声明 xff1a 来自https blog csdn net MyLibs article details 27913281 在编译参数中增加以下两条指令 xff1a fexec charset 61 gbk finput charse
  • C++ 读入优化与输出优化 模板

    来自 xff1a https blog csdn net liyizhixl article details 54412459 简介 C 43 43 是一种神奇的编程语言 自然 xff0c 读入和输出也有着许多种形式 xff1a 如 xff
  • RMQ(range minimum/maximum query)即查询区间最大最小值。

    转载来自 https www cnblogs com yyxayz p 4109390 html 对于求区间最大最小值 xff0c 我们自然而然就想到了一个O xff08 n xff09 时间复杂度的算法 xff0c 但是如果询问有很多呢
  • 数论小知识点总结

    m i 61 1 g c d m i 61 d m d m d i 61 1 m g
  • 牛客国庆集训派对Day1(A C E L)

    链接 xff1a https www nowcoder com acm contest 201 question 牛客国庆集训派对Day1 A Tobaku Mokushiroku Kaiji xff08 水题 xff09 C Utawar
  • 牛客国庆集训派对Day2(A F H)

    链接 xff1a https www nowcoder com acm contest 202 question 牛客国庆集训派对Day2 A 矩阵乘法 xff08 分块 xff09 F 平衡二叉树 xff08 数据结构 xff09 H 卡
  • Git learn

    分布式版本控制系统 Git https git scm com 一 初始化 init xff0c 添加 add 到暂存区 stage xff0c 提交 commit 到版本库 master 二 工作区 xff0c 版本库 状态 status
  • 牛客国庆集训派对Day4(A D I J)

    链接 xff1a https www nowcoder com acm contest 204 question 牛客国庆集训派对Day4 A 深度学习 xff08 思维水题 xff09 D 最小生成树 xff08 思维 xff09 I 连
  • Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) (A B C)

    链接 xff1a http codeforces com contest 1060 Codeforces Round 513 A Phone Numbers xff08 水题 xff09 B Maximum Sum of Digits xf
  • 计算几何 (POJ1127 、 )

    计算几何 1 判断线段是否相交 1 判断线段是否相交 在不需求出交点 xff0c 只需判断两条线段是否相交 xff0c 可以使用 1 快 速 排 斥 实
  • oled显示乱码解决方法

    有时候oled偶尔发生乱码 xff0c xff08 大多数时候正常 xff0c 偶尔乱码 原因分析 xff0c 由于显示oled时使用的i2c连线较长 xff0c 会出现更大的电感 进而出现振铃现象 解决办法 在时钟线和数据线中串联100欧
  • 次短路

    次短路 概念 xff1a 次短路是相对于最短路的 xff0c 简单来说就是第二短的路径 方法 xff1a d i j k s t r