• 「学习笔记」Hall定理


    Descripition

    设一张二分图两部点数为 ((x,y),x<y),则其的一个完备匹配定义为 左部 (x) 个点成为匹配点

    特别地,当 (x=y) 时,这类匹配也被称为完备匹配

    一个如上定义的二分图存在 完备匹配 的充要条件是对于左部点的大小为 (k) 的任意子集 (S),这些点在右部连到的点集(也被称为 (S) 的邻域,记为 (N(S)))大小不小于 (k)

    Proof

    首先证明必要性,如果一个点集的 (N(S)) 不足 (|S|),那么该集合并不能找到一个完备匹配,与定义相反

    其次是充分性,考虑使用归纳的手段,这部分分两种情况:

    • 如果存在一个严格子集 (S) 满足 (S=N(S)),则子集本身存在完备匹配

      如果删去 (S,N(S)) 后出现不满足条件的集合 (T),那么在原二分图中取子集 (Scup T),必然有 (|N(Scup T)|<|Scup T|),与题设矛盾

      那么由此证明如果存在 (|S|=|N(S)|)( m{Hall}) 定理成立

    • 如果所有子集的 (|N(S)|) 均大于 (|S|),那么找到一个点 (u) 并找到 ((u,v)in E),删掉 (u,vin V,(u,* ), (* ,v)in E)

      不难发现此时剩下的二分图每个子集 (S) 都能满足 (|N(S)|ge |S|),而且因为删掉了一个点,问题是原问题的子问题

      根据归纳假设,( m{Hall}) 定理在此情况下也成立


    例题

    CF1519F

    对于所有子集 (S),均需满足下式:

    [displaystyle{sum_{iin S}a_ilesum_{jin(cup_{iin S}L_i )}b_j} ]

    那么把每个箱子和锁拆成 (a_i,b_i) 个点,每个箱子上每个点向每个锁的每个点连边

    设箱子对应的点为左部点,若满足其有完美匹配,则上式成立

    那么状压 (DP) 可以很好的解决这个问题:设 ( m{dp(i,S)}) 表示考虑了前 (i) 个箱子后,右部点 每个锁剩下的点数为 (S)

    这里 (S) 使用五进制表示,实现每次暴力编码解码即可

    转移考虑枚举当前箱子拆出来的点匹配右边的哪种点,匹配几个,注意产生匹配就要付出代价,但是只用付出一次

    ( m{dfs}) 实现转移是容易的

    合法状态并不能让复杂度达到 (Theta(n imes 5^{2n})) 的上界,但是朴素 ( m{dfs}) 过了??

    ARC076F

    本题需要 ( m{Hall}) 定理的一个推论:一个任意二分图 ((V,E)) 的最大匹配为 (|V|-maxlimits_{Sin V}{|S|-|N(S)|})

    该推论可能可以通过增广路和匈牙利算法理解

    问题即求解 (maxlimits_{Sin V}{|S|-N(S)})

    发现对于一个特定的点集 (x),其结果就是 (|S|-maxlimits_{iin S} L_i-(m+1-minlimits_{iin S} R_i))

    使用数据结构维护扫描线容易完成

  • 相关阅读:
    with
    网编
    选课新系统大作业
    网络编程

    知识点
    Python
    学生选课大作业
    理解position与anchorPoint[转]
    毛玻璃效果的简单使用
  • 原文地址:https://www.cnblogs.com/yspm/p/15184873.html
Copyright © 2020-2023  润新知