• 最短路径可行边


    给定图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的可行边来建立网络流模型吧。

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

     

  • 相关阅读:
    2021年中央经济工作会议
    大人物不走直线路径
    批量修改:update inner join导致死锁
    linux 系统centos新添加一个硬盘,分区格式化挂载操作
    vuewaves点击容器出现水波纹效果
    多维表头的DataGridView
    TypeError: Property value expected type of string but got null
    linux下添加简单的开机自启动脚本
    Centos7 自定义 tomcat 的 systemctl 启动脚本
    uniapp的store使用
  • 原文地址:https://www.cnblogs.com/dialectics/p/12346408.html
Copyright © 2020-2023  润新知