• 最短路径可行边


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

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

     

  • 相关阅读:
    javascript学习笔记1
    html的那些小小细节
    高级排序之希尔排序
    归并排序
    java 块语句 和引用类型
    扩展思维
    javase jdk 环境变量 涵义
    java 冒泡排序 二分查找 选择排序 插入排序
    kafka原理
    java web 程序---注册页面密码验证
  • 原文地址:https://www.cnblogs.com/dialectics/p/12346408.html
Copyright © 2020-2023  润新知