• 图论笔记-最短路+二分图最大匹配+最小路径覆盖


    一  最短路

    模型一 增加限制

    例:给定一个图,求起点到终点的最短路,其中你可以使用最多k次机会使某条边的边权变为x

    解法:把每个点拆成k个点,分别表示还能使用多少次机会,构造新图。

     

    模型二 一个点集(点非常多,不能两两建边)之间两两可到达,求最短路。

    解法:新开一个点,每个点都连一条无向边到新点。

    二  二分图最大匹配

    二分图最大匹配 = 最小点覆盖 = n-最大点独立集 = n-最小边覆盖

    最小点覆盖:选取最少的点覆盖所有的边

    最大点独立集:一个点集,其中的点两两不可到达。

    大致证明:

    最大匹配=最小点覆盖:如果还能匹配,那就证明还有边没被覆盖。

    最小点覆盖=n-最大点独立集:如果独立集可以增大k,那就证明有k个点间两两没边,那最小点覆盖就可以删去这k个点。N个点,去掉最小点覆盖的,剩下的两两没边,就是最大点独立集。

    最小边覆盖=n-最大匹配:本来是n条边(每个点要被一条边覆盖),每匹配一对,就相当于减少了一条边。

    三  最小路径覆盖(有向无环图

    (1)每个点有且只有被一条路径覆盖。

     

    解法:把n个点拆成2n个点,变成二分图建边,然后 最小路径覆盖 = n-二分图最大匹配

    原因:本来是n条路径(每个点作为一条路径),每匹配一对,就相当于减少了一条路径。因为是二分图匹配,所以每个点只会在一条路径上。

    (2)每个点可被多条路径覆盖。

    解法一:在原图中用一次floyd,则上图新建了边(15)(24)(25),再把它当成每个点只能陪一条路径覆盖来做。因为路径2->3->4与路径1->3->5相当于2->3->41->5,即一条覆盖了k个点的路径可以看作是覆盖了<=k个点的路径。

    解法二:

     

    用网络流(最大流)跑出最大匹配。在二分图的右边按照原图建边,边权全为正无穷,则原理跟上面一样,路径1-3-5相当于路径1-5,则跑出的最大匹配就是一个点可在多条边上的。

  • 相关阅读:
    抽象工厂模式
    观察者模式
    建造者模式
    外观模式
    drf 之路由
    drf之视图
    drf--请求和响应
    def--序列化
    drf之restful规范
    Tepora使用
  • 原文地址:https://www.cnblogs.com/KonjakJuruo/p/5471008.html
Copyright © 2020-2023  润新知