定义
对于一张二分图 G = ( V , E ) G=(V,E) G=(V,E),设其左右部点集分别为 V L , V R V_L,V_R VL,VR,不妨认为 ( ∣ V L ∣ ≤ ∣ V R ∣ ) (|V_L|\leq |V_R|) (∣VL∣≤∣VR∣),定义该二分图的一组 完备匹配 为左部 ∣ V L ∣ |V_L| ∣VL∣ 个点全部成为匹配点的匹配。
Hall 定理讲的是,定义 N ( v ) N(v) N(v) 为节点 v v v 的邻居集,如果对于任意 S ⊆ V L S\subseteq V_L S⊆VL,均有 ∣ S ∣ ≤ ∣ ⋃ u ∈ S N ( u ) ∣ |S|\leq|\bigcup\limits_{u\in S} N(u)| ∣S∣≤∣u∈S⋃N(u)∣,则该二分图存在一组完备匹配。
证明参考资料
一些推论
-
对于一张 k k k 正则二分图(每个点度数都为 k k k,且 k ≥ 1 k\geq1 k≥1),若 ∣ V L ∣ = ∣ V R ∣ |V_L|=|V_R| ∣VL∣=∣VR∣,则必有 k k k 组边 不交 的完美匹配。
证明:考虑归纳,只需证明该二分图存在一组完美匹配,那么删去这些匹配边后会得到 k − 1 k-1 k−1 正则二分图,归纳即证。
考虑 hall 定理,若存在 S ⊆ V L S\subseteq V_L S⊆VL 使得 ∣ S ∣ > ∣ ⋃ u ∈ S N ( u ) ∣ |S|>|\bigcup\limits_{u\in S} N(u)| ∣S∣>∣u∈S⋃N(u)∣,由于 ∣ ⋃ u ∈ S N ( u ) ∣ |\bigcup\limits_{u\in S} N(u)| ∣u∈S⋃N(u)∣ 中的点的度数之和必定 ≥ \geq ≥ k ∣ S ∣ k|S| k∣S∣,但该点集的点数却小于 ∣ S ∣ |S| ∣S∣,显然矛盾,因此 hall 条件成立,存在完美匹配。 -
左右两部分别为 V L , V R V_L,V_R VL,VR 的二分图最大匹配为 ∣ V L ∣ − max S ⊆ V L ( ∣ S ∣ − ∣ ⋃ u ∈ S N ( u ) ∣ ) |V_L|-\max\limits_{S\subseteq V_L}(|S|-|\bigcup\limits_{u\in S} N(u)|) ∣VL∣−S⊆VLmax(∣S∣−∣u∈S⋃N(u)∣)。
很好理解。
应用
题目类型很多。
直接应用
数据范围比较小,可以 2 n 2^{n} 2n 枚举集合 check 是否满足 hall 条件
AT_arc106_e [ARC106E] Medals
枚举集合完之后问题转化成了:求多少天才能让并集大小为 K K K。
试试二分,好像更好做了,但推式子还是推不出来答案。
然后观察一下发现答案是 2 n k 2nk 2nk 级别的,是可以直接扫一遍的。
剩下就很简单了。
数据结构维护 hall 条件
正常来说想使用 hall 来 求/判断 最大匹配需要枚举所有集合 S S S,复杂度不可接受
但在某些题目中合法(或者说有用)的 S S S 可能会满足某种性质(比如是一段区间),从而使得枚举量大大减少,可以用数据结构直接维护。
P3488 [POI 2009] LYZ-Ice Skates
直接应用,显然有用的人的集合一定是一段区间,推推式子就转化成了最大子段和。
CF338E Optimize!
有用集合是值域上一段前缀。
AT_arc076_d [ARC076F] Exhausted?
以人为左部点列 hall 条件,求它们的并;可以看成先选出一段并区间,再选出尽可能多的人,这样方便用数据结构维护。
求并可以转化成求补集交,扫描线补集右端点,维护所有左端点答案。
P9528 [JOISC 2022] 蚂蚁与方糖
如果不单单是判断,而是求最大匹配会有什么变化呢?
发现区别在于:现在可能选出 多段 连续区间。
形式化的描述一下简化后的问题:设蚂蚁前缀和为 S i S_i Si,方糖前缀和为 T i T_i Ti,你要选出若干段区间 { l 1 , r 1 , . . . l k , r k } \{l_1,r_1,...l_k,r_k\} {l1,r1,...lk,rk},最大化 ∑ i = 1 k T r i − L − T l i + L − 1 − ( S r i − S l i − 1 ) \sum\limits_{i=1}^k T_{r_i-L}-T_{l_i+L-1}-(S_{r_i}-S_{l_i-1}) i=1∑kTri−L−Tli+L−1−(Sri−Sli−1) 最大。
化一下式子: ∑ i = 1 k ( T r i − L − S r i ) + ( S l i − 1 − T l i + L − 1 ) \sum\limits_{i=1}^k (T_{r_i-L}-S_{r_i})+(S_{l_i-1}-T_{l_i+L-1}) i=1∑k(Tri−L−Sri)+(Sli−1−Tli+L−1)
令 P i = T i − L − S i P_i=T_{i-L}-S_i Pi=Ti−L−Si, Q i = S i − T i + L Q_i=S_i-T_{i+L} Qi=Si−Ti+L,那么就是每个点有权值 P , Q P,Q P,Q,要选出形如 Q P Q P . . . Q P QPQP...QP QPQP...QP 的若干个点,最大化选出点的权值和。
这个问题具有良好的可合并性,只需记录当前区间中开头结尾选法对应的最大值即可。
现在涉及到修改,由于我们是在前缀和意义下考虑所以修改是一段后缀,直觉上区间修改很难维护,可能只能分块+重构什么的,但还是应该多试试的,有些性质得在编做法的过程中才能发现。
考虑线段树维护上述答案,对于修改 ( t , x , v ) (t,x,v) (t,x,v):
- 如果是修改蚂蚁 S S S,等价于 [ x , inf ] [x,\inf] [x,inf] 区间中所有 P − v P-v P−v, Q + v Q+v Q+v,显然我们只需要在当前线段树节点递归到 x ≤ l x\leq l x≤l 时快速更新答案即可,那么容易发现影响是 P . . P P..P P..P 会 − v -v −v, Q . . . Q Q...Q Q...Q 会 + v +v +v,其他不变,可以直接打 tag。
- 如果修改方糖 T T T,就是让 [ x + L , inf ] [x+L,\inf] [x+L,inf] 中 P + v P+v P+v, [ x − L , inf ] [x-L,\inf] [x−L,inf] 中 Q − v Q-v Q−v。还是考虑线段树递归的过程,递归边界有几种:
- r < x − L r<x-L r<x−L,没影响,直接
return。 - x + L ≤ l x+L\leq l x+L≤l,和修改 S S S 类似,直接打 tag 即可。
- x − L ≤ l , r < x + L x-L\leq l,r< x+L x−L≤l,r<x+L,这比较困难,因为这样的区间的四种答案是受到所选 Q Q Q 数量的影响的,无脑想法是维护凸包什么的。但我们有性质!注意到这样的区间长度 ≤ x + L − 1 − ( x − L ) = 2 L − 1 \leq x+L-1-(x-L)=2L-1 ≤x+L−1−(x−L)=2L−1,那么形如 Q . . . P Q...P Q...P 一个点都不会选, P . . . Q P...Q P...Q 最多选一组 P Q PQ PQ, P . . . P P...P P...P 最多选成 P P P, Q . . . Q Q...Q Q...Q 最多选成 Q Q Q,所有的 Q Q Q 数量都是固定的,可以直接打 tag 。
- r < x − L r<x-L r<x−L,没影响,直接
真好。
hall 定理辅助构造 / 猜结论
五花八门,具体题目具体应用。
AT_agc037_d [AGC037D] Sorting a Grid
好玩,喜欢。
发现本质上要为每个元素分配一列,然后过程是 起点 → \to → 这一列,起点行 → \to → 这一列,终点行 → \to → 终点
限制是不能有俩起点 或者 终点在同一行的元素分配到了同一列。
继续把限制拆开看,先从每行选一个起点,要求起点对应终点所在行互不相同,这就很二分图匹配了。
左部是起点行,右部是终点行,连边就表示一种元素,每次选一组完美匹配出来分配到同一列上。
就是说我需要 m m m 组边不交的完美匹配,这还刚好是 m m m 正则二分图,对完啦!
再放个东西:边染色
AT_agc029_f [AGC029F] Construction of a tree
神秘题,不喜欢。
首先感受到可以用类似 hall 的条件判无解。
树上连边很难刻画;但考虑为每个点分配父亲,也就是分配父亲所在集合,这就是简单的匹配问题了。
这样最后节点会剩下一个,不妨认为它是根,然后从它开始 dfs 建树,可以证明遍历不了所有点的话就无解。
还有记住二分图匹配可以跑 1 0 5 10^5 105!!
P9070 [CTS2023] 琪露诺的符卡交换
逆天。
想想什么是好做的:我可以使得每一列恰好是 1 ∼ n 1\sim n 1∼n 的排列!
然后呢?我可以交换 ( i , j ) ( j , i ) (i,j)(j,i) (i,j)(j,i),把矩阵转置!
我靠,做完了!
逆用 hall 定理
顾名思义,有时候列出了 hall 条件的式子,就可以转化成限制二分图有完备匹配,某些题里后者比前者可做。
CF1519F Chests and Keys
列出来 B o b Bob Bob 收益 > 0 >0 >0 的式子发现就是 hall 条件,那么直接转化成存在完备匹配。
数据范围很小,无脑记状态 d p dp dp 就行。
不知道和 hall 有什么关系的题
反正他放到作业里了,我也不知道有啥关系。
CF103E Buying Sets
考虑怎么刻画 子集个数等于子集并 这个条件,由于求最小而且它保证了那个条件,于是可以转化成 inf × ( 子集并 − 子集个数 ) \inf\times(子集并-子集个数) inf×(子集并−子集个数),贡献拆开。
然后就是选一个子集就选它的所有元素的限制,这显然是个最大(小)权闭合图,网络流即可。
记住 D i n i c Dinic Dinic 复杂度可以写成 n 2 m n^2m n2m ,与边权无关的。
好像有神秘二分图匹配做法,不理解。
LibreOJ β Round #3 绯色 IOI(悬念)
干脆你叫 <填数游戏2> 算了,噢原来你比填数游戏早啊
一模一样的建图,一模一样的观察,一模一样的难写。