「算法笔记」霍尔定理

修改于 2023 年不知道哪个月。

2021 年写的霍尔定理入门(已折叠)
一、前置概念

大家都会的东西。下面的图一般指二分图。

  • 匹配:在图论中,一组匹配(matching)是一个边的集合,其中任意两条边都没有公共端点。

    对于一组匹配 \(S\)\(S\) 是一个边集),属于 \(S\) 的边被称为“匹配边”,匹配边的端点被称为“匹配点”。剩余的边或点被称为“非匹配边”和“非匹配点”。

  • 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配。

  • 完美匹配:如果一个图的某组匹配中,图中所有的顶点都是匹配点(显然同时也符合最大匹配),那么它就是一个完美匹配。

    完美匹配,就是一组匹配中,左部的一个点恰好匹配到右部一个点,同样地,右部的一个点恰好匹配到左部一个点。

二、霍尔定理

霍尔定理是判断二分图是否存在完美匹配的充要条件。

  • 首先假设 \(|X|\leq |Y|\)(其中 \(X\) 是左部的点数,\(Y\) 是右部的点数)。

    上面的这种说法,意思是,我们能把 \(X\) 中的点全部用完(作为匹配点),\(Y\) 中的点不一定用完(将点数较小的一侧的点都用完)。

    另一种说法是:要求 \(|X|=|Y|\)(点之间一一匹配,所有点都用完)。

    我们可以理解为是两种定义,两种说法哪个对,取决于怎么定义“完美匹配”。但是霍尔定理对它们都适用,所以讨论霍尔定理时,我们采用更一般性的定义。

  • 对于任意 \(X\) 的子集 \(a\),设 \(b\)\(a\) 能到达的右部点集的并(显然通过 \(a\) 可以唯一确定 \(b\)),都有 \(|a|\leq |b|\)

必要性是显然的。因为若某一个 \(|a|>|b|\)\(a\) 中必然有某些点是匹配不了的(即完成不了把 \(a\) 中的点用完这个要求)。充分性不太好证,可以不用管,而且这个定理看起来就很对 QwQ。

举个栗子:LOJ 6062. 「2017 山东一轮集训 Day2」Pair(题解被吃了)。

最后,感谢 Dls 的指导,Dlstxdy!

补:霍尔定理的推论是,设 \(mx\)\(a\) 与其对应 \(b\)\(|a|-|b|\) 的最大值,二分图的最大匹配为 \(|X|-mx\)(ARC076F)。

一、霍尔定理

  1. 霍尔定理:设二分图 \(G\) 的两部分分别为 \(X,Y\)\(|X|\leq |Y|\),记 \(N(x)\) 表示与 \(x\) 相邻的点集,则存在一个大小为 \(|X|\) 的匹配当且仅当 \(\forall S\subseteq X,|S|\leq |\bigcup\limits_{x\in S}N(x)|\)

    证明:必要性显然。充分性反证,考虑选左侧一个非匹配点出发尝试增广,设访问到了左部点集合 \(L\)、右部点集合 \(R\),一定有 \(\bigcup\limits_{x\in L}N(x)=R\)\(|L|=|R|+1\)(因为无法成功增广),与 \(|L|\leq |\bigcup\limits_{x\in L}N(x)|\) 矛盾。

    • 贪心转化:有时可以反向考虑,固定 \(T=\bigcup\limits_{x\in S}N(x)\) 考虑左部连向它的 \(S\) 的最大 \(|S|\)。显然所有 \(N(x)\subseteq T\)\(x\) 都会选入 \(S\)。把 \(|T|\) 算大没关系。

    • \(a\in X\) 能匹配哪些 \(b\in Y\),使得删掉 \(a,b\) 之后仍存在完美匹配?

      首先没删掉之前需要有完美匹配,\(\forall T\subseteq Y\)\(\sum_{x\in X}[N(x)\subseteq T]\leq |T|\)。删掉之后,需要 \(\forall T\subseteq Y\)\(\sum_{x\in X}[N(x)\subseteq T]-[N(a)\subseteq T]\leq |T|-[b\in T]\)

      考虑什么时候 \(a,b\) 不合法(原本都 \(\leq\),删掉后出现了 \(>\)):\(\exists T\subseteq Y\)\(\sum_{x\in X}[N(x)\subseteq T]=|T|\)\(N(a)\nsubseteq T,b\in T\)。等价于,\(\exists T\subseteq Y\land b\in T\)\(\sum_{x\in X\land x\neq a}[N(x)\subseteq T]=|T|\)

      考虑维护 \(|T|-\sum_{x\in X\land x\neq a}[N(x)\subseteq T]\)(它一定 \(\geq 0\),要维护 \(=0\) 的位置只要维护区间最小值以及最小值的出现位置即可)。对于每个这个值为 \(0\)\(T\),将 \(b\in T\) 设为不合法。

      • 某道题:所有 \(N(x)\) 和需要枚举的 \(T\)\(Y\) 一定构成连续的区间。那么可以扫描线 + 线段树。

        \(N(x)=[l_x,r_x]\)。扫描线 \(R\),维护 \(seg_L=(R-L+1)-\sum_{x\in X\land x\neq a}[[l_x,r_x]\subseteq[L,R]]\)。扫到 \(R\) 时,先全局 \(+1\),再取出 \(r_x=R\),将 \(L\in [1,l_x]\)\(seg_L\)\(-1\)。若最小值为 \(0\),设第一个 \(0\) 的位置是 \(pos\),将 \(b\in[pos,R]\) 设为不合法。

    • 有时推不出来可以交换 \(X,Y\) 再试试。

  2. 点带权:若左部点 \(i\) 可匹配 \(a_i\) 个右部点(可重复)、右部点 \(i\) 可匹配 \(b_i\) 个左部点(可重复),\(suma(X)\leq sumb(Y)\),则存在一个大小为 \(suma(X)\) 的匹配当且仅当 \(\forall S\subseteq X,suma(S)\leq sumb(\bigcup\limits_{x\in S}N(x))\)

    证明:将左部 \(1\) 个点权为 \(v\)、连向 \(N(x)\) 的点 \(x\),拆成 \(v\) 个点权为 \(1\)、连向 \(N(x)\) 个点,然后尝试增广时看作右部一个点可以走 \(b_i\) 次。

    • 一个有点类似的 Gale-Ryser 定理

      “存在一个二分图,左部点度数分别是 \(a_{1\sim n}\)、右部点度数分别是 \(b_{1\sim m}\)(保证 \(\sum a_i=\sum b_i\)。不能有重边)“ \(\Leftrightarrow\) ”将 \(a,b\) 分别 从大到小 排序得到 \(a',b'\)\(\forall k\in[1,n]\)\(\sum_{i=1}^k a_i\leq \sum_{i=1}^m\min(b_i,k)\)(把 \(a,b\) 互换也一样,\(\forall k\in[1,m]\)\(\sum_{i=1}^k b_i\leq \sum_{i=1}^n\min(a_i,k)\))“。

      证明:建二分图 \((S\to i,a_i),(j\to T,b_j),(i\to j,1)\),限制最大流 \(=\sum a_i\)。转化为最小割,设与 \(S\) 连通的是 \(i_S\cup j_S\),与 \(T\) 连通的是 \(i_T\cup j_T\),cost 为 \(\sum_{i\in i_T}a_i+\sum_{j\in j_S}b_j+|i_S|\cdot |j_T|\)。固定 \(k=|i_S|\)\(i_T\) 肯定选 \(a\) 最小的 \(n-k\) 个,而右部点 \(j\) 如果归入 \(j_S\)\(b_j\) 的贡献、归入 \(j_T\)\(k\) 的贡献,所以肯定选 \(\min(b_j,k)\)。所以最小割为,\(\min_k\{\sum_{i=k+1}^n a_i+\sum_{j=1}^m \min(b_j,k)\}\),需要 \(\geq \sum a_i\)。所以 \(\forall k,\sum_{i=1}^k a_i\leq \sum_{j=1}^m \min(b_j,k)\)

      情形:有一个大小为 \(n\) 的可重集(\(i\) 的出现次数为 \(a_i\)),问能否将其划分为 \(m\) 个不可重集(设大小分别为 \(b_{1\sim m}\))。合法当且仅当 \(\forall k,\sum_{i=1}^k a_i\leq \sum_{i=1}^m \min(b_i,k)\),也当且仅当 \(\forall k,\sum_{i=1}^k b_i\leq \sum_{i=1}^n\min(a_i,k)\)。我们用 DP 对 \(a\)\(b\) 按从大到小的顺序进行规划,每个前缀和都需要满足一个上限。

      (CF1740F Conditional Mix)

  3. 推论:若一张无向图每个点度数均为 \(k\),则称其为 \(k\) 正则图。那么 \(|X|=|Y|\)\(k\) 正则二分图必有完美匹配(\(k\geq 1\))。

    证明:因为 \(|S|\times k\) \(\leq\) \(\bigcup\limits_{x\in S}N(x)\) 的度数和(\(S\) 每个点都有 \(k\) 条边连向 \(\bigcup\limits_{x\in S}N(x)\)\(=|\bigcup\limits_{x\in S}N(x)|\times k\)

  4. \(k\) 正则二分图一定能拆成 \(k\) 个完美匹配。

    证明:由于霍尔定理一定存在完美匹配,删掉之后是 \(k-1\) 正则二分图,所以一定能拆。

  5. 推广:二分图的最大匹配为 \(|X|-\max\limits_{S\subseteq X}(|S|-|\bigcup\limits_{x\in S}N(x)|)\)。它也等于 \(\min\limits_{S\subseteq X}(|X|-|S|+|\bigcup\limits_{x\in S}N(x)|)\)

    证明:显然最大匹配不会大于这个数。其次,若最大匹配小于这个数,记 \(k=\max\limits_{S\subseteq X}(|S|-|\bigcup\limits_{x\in S}N(x)|)\),说明左部非匹配点数 \(>k\),类似霍尔定理的证明,从左部所有非匹配点(设有 \(s\) 个)出发尝试增广,一定有 \(\bigcup\limits_{x\in L}N(x)=R\)\(|L|=|R|+s\),与 \(s=|L|-|\bigcup\limits_{x\in L}N(x)|>k\) 矛盾。

posted @ 2021-03-05 18:16  maoyiting  阅读(1534)  评论(0)    收藏  举报