• 二分图最大匹配总结


    一.结论:

    1.最大匹配。

    2.最小点覆盖:用最少的点去覆盖掉所有的边。最小点覆盖 = 最大匹配

    3.最小边覆盖:用最少的边区覆盖掉所有的点,单独一个点可看作一条边。最小边覆盖 = 结点数 - 最大匹配

    4.最大独立集:选出尽可能多的点使得他们之间没有关系(没有边相连)。最大独立集 = 结点数 - 最大匹配

    5.最大团:选出尽可能多的点使得他们构成一个完全图。最大团 = 补图的最大独立集

    6.最小路径覆盖(有向图):选出最少的路径,使得每个点恰好在一条路径上,单独一个点可看作一条边。最小路径覆盖 = 结点数 - 最大匹配

    二.证明:

    1.最小点覆盖 = 最大匹配:

    König定理,不会。

    2.最小边覆盖(ans) = 结点数(n) - 最大匹配(cnt)

    证明:我们假设图中不存在边,那么每个点都要一条边去覆盖,所以总共要n条覆盖边。之后我们考虑原图中的边,利用Hungary()算法求出最大匹配数为cnt,这就表明了:有cnt个点,可以与其他点共用一条覆盖边,于是就可以除去cnt条覆盖边。所以最小边覆盖:ans = n - cnt 。

    3.最大独立集(ans) = 结点数(n) - 最大匹配(cnt)

    建图:如果u和v有关系,或者说有冲突,那么就在u和v之间连上边。

    证明:最大独立集,即在在图中 删去尽可能少的点, 使得剩下的点互相独立,即没有边的存在。而我们又知道,最小覆盖点集覆盖掉了所有的边,当我们把这些点都删去了,就不存在边了。而又因为是“最小”覆盖点集,即删除了最少的点,因为得到了最大独立集。于是最大独立集:ans = n - cnt 。

    4.最大团 = 补图的最大独立集

    证明:最大团,即两两都有联系,那么它的补图,就是两两都没有联系。所以最大团即为补图的最大独立集。

    5.(有向无环图DAG) 最小路径覆盖(ans) = 结点数(n) - 最大匹配(cnt) 

    建图:把每个结点u都拆成两个结点u和u'分于左右两边,其中左边的u为起点,右边的u'为终点,如果在图中有u-->v的边,则在建图时,连u-->v' 。

    证明:我们假设图中不存在边,即没有路径,那么每个点都要一条路径去覆盖,所以总共要n条路径。之后我们考虑原图中的边,利用Hungary()算法求出最大匹配数为cnt,这就表明了:有cnt个点,可以接在其他结点得到后面,于是就可以除去cnt条路径。所以最小路径覆盖:ans = n - cnt 。

    注意:最小路径覆盖于最小边覆盖是不同的,虽然公式一样,但是前提条件就不同了:首先最小路径覆盖是有向图,而最小边覆盖是无向图。其次,最小路径覆盖建图时需要拆点,而最小边覆盖只需直接建图。

    三.对匈牙利算法的认知:

    枚举二分图左边的每一个点,以此为出发点,看是否能找到增广路,即是否能找到右边的点为未匹配点,由于起始点也为未匹配点,所以在这条路径上,可以增加一对匹配点,怎么做呢?可知在这条增广路径上,匹配边和未匹配边交替出现,且未匹配边比匹配边多一条,所以我们就把未匹配边改为匹配边, 把匹配边改为未匹配边。这样,匹配数就+1了。

    四.题型总结:

    1.一种模型的图是明确的二分图,如:男与女、x坐标与y坐标、老师与学生等,属于两个不同类别的。在此,假定u为第一类别,v为第二类别,如果u和v相连,那么M[u][v]设为true,但特别要注意的是,不能也把M[v][u]也设置为true。因为数组第一维表示的是第一类别,第二维表示第二类别,所以不能理解为双向图,而应该理解为单向图。且二分图左边的点只能作为边的起点,二分图右边的点只能作为边的终点。 由于此类模型可以为单向图,所以所求得的最大匹配数无需除以2。

    2.另一种模型的图则不是二分图,即一般图。这时候需要分情况讨论了:

    1)如果图中不含有奇环(环内结点数为奇数),或者可以通过染色分成两部分(每一部分的结点之间没有联系),那么我们就可以把一般图当做二分图来求解:把每个点拆成两个点,其中一个点只作为出点,位于二分图的左边;一个点只作为入点,位于二分图的右边。注:如果题目是无向图,则应该双向建图,然后把得到的最大匹配数/2;如果是单向图,则建单向边,得到的最大匹配即为答案。

    2)如果图中含有奇环,那么就只能用一般图匹配带花树来求解了。

    五.题目类型:

    1.最大匹配:

    HDU1045 Fire Net
    HDU2444 The Accomodation of Students
    HDU1083 Courses 
    HDU1281 棋盘游戏 
    HDU2819 Swap
    HDU2389 Rain on your Parade
    HDU4185 Oil Skimming
    POJ3020 Antenna Placement 

    2.最小点覆盖:

    CSU-1531 Jewelry Exhibition
    UVA11419 SAM I AM
    HDU1054 Strategic Game

    3.最小边覆盖:

    POJ3020 Antenna Placement 

    4.最大独立集:

    UVALive3415 Guardian of Decency
    HDU3829 Cat VS Dog

    5.最大团:

    POJ3692 Kindergarten 

    6.最小路径覆盖:

    UVALive3126 Taxi Cab Scheme 
    HDU1151 Air Raid 
    POJ2594 Treasure Exploratio

    7.输出最小覆盖点集:

    UVA11419 SAM I AM

    8.一般图匹配带花树:

    URAL1099 Work Scheduling

  • 相关阅读:
    2020年Android面试题含答案
    flutter系列(一)----- 开发环境搭建
    Android应用安全防护和逆向分析 ——apk混淆成其他语言代码
    Android应用安全防护和逆向分析 ——apk反编译
    Android中 TextView 加载 混合字符 自动换行解决方案
    H5跳转app本地的规则定义
    Android ListView 九大重要属性详细分析
    ListView和ScrollView滑动到顶部
    简要的汇总Android
    关于ViewPager+Fragment中Fragment不销毁/生命周期
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/7818888.html
Copyright © 2020-2023  润新知