Hall's 定理和 Konig 定理
Hall's 定理:二分图 \((X,Y,E)\) 有大小为 \(|X|\) 的匹配 $\iff $ 对于 \(\forall A\subseteq X\),\(|N(A)|\ge |A|\)。(\(N(A)\) 表示 \(A\) 的邻域)
Konig 定理:二分图最小点覆盖 = 最大匹配。
比较常用的还是 Hall 定理。
例题一:CF981F
首先最小化最大,一眼鉴定为二分。二分这个最大值 \(k\),问题变成判断是否能让新郎新娘匹配,每一对距离 \(\le k\)。
如果把新郎新娘视作二分图,每个点只和距离 \(\le k\) 的点连边,问题就是求是否有完美匹配。
完美匹配判定,可以联想到 Hall's 定理。
先把环复制一遍,然后在链上处理。
可以 \(O(n)\) 预处理出他向左、向右最远能到达哪个新娘。易知每个新郎能访问到的新娘必然是一个区间。
感性理解,要尽可能取一个新郎集合违背 Hall's 定理,一定是取一个新郎区间最好。所以只需要判断是否有一个新郎区间对应的新娘数量少于新郎。
双指针即可。
例题二:自然选择号
有一个 \(n\times m\) 网格图,对格子黑白染色。给出 \(b_1\sim b_m\) 表示第 \(i\) 列的黑格子个数。记 \(a_1\sim a_n\) 为第 \(i\) 行的黑格子个数,问有多少种可能的 \(a\)。
\(n,m\le 80\)。
没啥入手点,找找判定为合法的条件。
首先 \(\sum a=\sum b\)。
想到可以刻画为执行 \(m\) 次操作,第 \(i\) 次任选 \(b_i\) 个位置加一,问最终有多少种 \(a\)。容易看出若 \(a\) 可行,那么 \(a\) 的排列肯定也可行,所以这启发我考虑有多少种递增的 \(a\) 是可得到的。
这个操作是可逆的,所以我们考虑从 \(a\) 减小到全 \(0\) 是否可行。有一个贪心的判定方法:每次让最大的 \(b_i\) 个减一,如果非 \(0\) 数不足 \(b_i\) 个则无解。但是这个判定方法有一个很不好,就是你减少了需要重新排序。如果不想重新排序,就要找到 "一段相等数里开头的一段",这个也不好做。
然后就不会了 …… 开题解!
考虑另外的刻画方式。网格图上黑白染色,考虑二分图建模。对行建 \(n\) 个点,列建 \(m\) 个点,\((i,j)\) 是黑格子就给两边的 \((i,j)\) 连边。题目给定的 \(b\) 其实就是给定了右部点的度数。
所以题目就是求二分图给定了半边的度数 \(b\),求另外半边的度数 \(a\) 有多少种取值。依然继续考虑判定一个固定的左部点度数 \(a\) 是否可行。
-
可以考虑 Hall 定理,拓展一下有 \(\sum_{i\in S}a_i\le \sum_{j=1}^m\min(b_j,|S|)\)。
-
也可以考虑网络流建模,相当于判定能不能中间连边使得最大流等于黑格子个数 \(\sum b_i\),转化为最小割,若割了 \(S\) 的左边和 \(T\) 的右边,那么要求此时的代价不能小于 \(\sum b_i\),即 \(\sum_{i\in S}a_i+\sum_{j\in T}b_j+(n-|S|)(m-|T|)\ge \sum b_i\)。
以上两种方式都能推出一个结果:限制就是 \(a\) 中前 \(i\) 大的数的和要小于等于某个参数 \(r_i\),直接 DP 即可。
例题三:AGC029F Construction of a tree
没写题解,去看洛谷题解区小粉兔的题解。

浙公网安备 33010602011771号