zoukankan      html  css  js  c++  java
  • 最短路径可行边

    给定图G,求u-v的最短路径可行边。

    u-v的最短路径可行边:存在一条u-v的最短路径经过这条边。

    与之相对应的是最短路径必须边:任意一条最短路径都必须经过的边。本文不探讨该问题。

    首先求出u为起点的单源最短路径(Dijkstra或者SPFA随意),以dis[x]表示u到x的最短距离。

    然后明确一个充分必要条件:一条边a->b是u->b的最短路径可行边的 充分必要条件是 dis[a]+w[a->b]=dis[b]。(由最短路径的定义和性质显而得证)

    进而,我们判断v的所有入边x->v是否为u->v的最短路径可行边。若是:则将x加入队列,并将这条边标记为u->v的最短路径可行边。

    然后从队列中取元素x并求u->x的最短路径可行边,这条u->x的可行边也是u->v的可行边,标记这条边,并将 入点 加入队列。重复此过程直至队列为空,所有标记的边即为u->v的可行边。

    对了注意不要将一个点重复加入队列。

    喜闻乐见的综合性题目:Marriage Match IV HDU - 3416

    对于这题可以先看下这篇题解:https://www.cnblogs.com/xiuwenli/p/9326457.html

    题解求的S(源点)到任意一点的最短路径可行边来建立网络流模型,我们实际需要的是S->T(汇点)的可行边来建立网络流模型。那么这样扩充边是否会使答案错误?

    答:不会。

    证明:

      若一条边a->b是S->T的最短路径可行边,那么它也一定是S->b的最短路径可行边,因为最短路径由最短路径组成这条性质。所以所有S->T的可行边都求出来了。

      若一条边a->b仅仅是S->b的可行边,那么说明没有最S->T的最短路径经过b(若有,则a->b也是S->T的最短路径可行边),那么不存在由b出发的边,也就说明在网络流中流到b的流不会流出,即不存在流到b的可行流。所以这种可行边对网络流没影响。

    若这种证明不好理解,就直接求S->T的可行边来建立网络流模型吧。

    若有错误敬请指正!非常感谢!

     

  • 相关阅读:
    Leetcode 3:无重复字符的最长子串
    激光三角测量法在工业视觉检测上的应用
    通俗易懂的Harris 角点检测
    杂乱场景中的尺度层次三维目标识别
    多视图几何三维重建实战系列之R-MVSNet
    一文详解工业相机和镜头选取
    LOAM论文介绍与A-LOAM代码简介
    基于双目事件相机的视觉里程计
    在医学图像分析中使用ICP算法进行点云配准
    两种ICP的改进算法:PLICP与NICP
  • 原文地址:https://www.cnblogs.com/dialectics/p/12346408.html
Copyright © 2011-2022 走看看