Min - Max 容斥小记
xxxxxzy
·
2025-05-05 11:51:08
·
算法·理论
Min - Max 容斥
又称最值反演,是⼀种对于特定集合,在已知最⼩值或最⼤值中的⼀者的情况下,求另⼀者的算法。
例如 \max(a,b) = a + b - \min(a,b) 。
又或如 \max(a,b,c) = a+b+c-\min(a,b)-\min(a,c)-\min(b,c)+\min(a,b,c) 。
形式化地,我们表示为:
\max(S)=\displaystyle\sum\limits_{T\subset S}(-1)^{|T|-1}\min(T)
\\
\min(S)=\displaystyle\sum\limits_{T\subset S}(-1)^{|T|-1}\max(T)
需要注意,这里的 T 是非空子集。
证明
对第一个式子(第二个同理),给一个自己的感性证明:
设 S 的最大值为 x ,则当且仅当 T = \{x\} 时,右侧可以产生 x 的贡献。
对于从 S 中除去 x 的集合 U 每个数选或者不选的每一种方案,x 不会对值造成影响,但会对集合大小造成影响,也就是会让两种方案和为 0 。
值得注意的是,Min - Max 经常与期望,gcd 等连用。
Min - Max 容斥和期望
由于期望的线性性,我们可以得到:
E[\max(S)]=\displaystyle\sum\limits_{T\subset S}(-1)^{|T|-1}E[\min(T)]
Min - Max 常见于解决一类“期望多久可以全部覆盖”类的问题。在这类问题中,我们定义 t_i 为第 i 个元素被覆盖的时间,所求的就是 E[\max\limits_{i \in S} (t_i)] ,这样就可以通过 Min - Max 容斥转化为 E[\min\limits_{i\in T}(t_i)] ,这个的实际含义就是“第一次覆盖到点集 T 中元素的期望时间”。
「HDU4336」Card Collector
题目大意:n 个元素,每次随机覆盖一个,每个元素被覆盖的概率是 p_i ,元素可以被多次覆盖且 \sum p_i \ne 1 ,求期望次数使得元素被全部覆盖,n \le 20 。
首先有个很显然的 O(n2^n) 的状压做法,这个不提。
设元素 i 的被覆盖时间是 t_i ,Min - Max 容斥,枚举点集 T ,转化为求覆盖到点集 T 中任意一个点的期望次数。
设 p 为单次覆盖覆盖到 T 的概率,则由经典的二项分布模型可知,期望次数 E=\dfrac{1}{p} 。
时间 O(2^n) 。
「HAOI2015」按位或
Min - Max 容斥,考虑求覆盖点集 T 的期望次数。
记 p_T 为选择到 T 的子集的概率,U 为全集,则单次选中的概率 1-p_{U \setminus T} ,则期望次数就为 \dfrac{1}{1-p_{U \setminus T}} 。
需要做一个高维前缀和,复杂度 O(n 2^n) 。
「PKUWC2018」 随机游走
Min - Max 容斥,问题转化为第一次走到点集 T 中的点的期望次数。
树上随机游走问题,设 f_i 为 i 的期望次数,则 f_i = \dfrac{1}{d_i}(f_{fa_i} + \displaystyle\sum\limits_{j \in son(i)}f_j)+1 ,然后套路地设 f_i = k_if_{fa_i}+b_i 。
则化简为 d_if_i = f_{fa_i} + \displaystyle\sum b_j + f_i \displaystyle\sum k_j+d_i 。
进一步化简得到 k_i=\dfrac{1}{d_i - \sum k_j}, b_i = \dfrac{d_i+\sum b_j}{d_i-\sum k_j} 。
特殊地,对于 T 中的点,k_i=b_i=0 ,这样 b_x 就是答案。
预处理所有 T ,高维前缀和预处理答案,做完了,复杂度 O(n 2^n) 。
「ABC242Ex」Random Painting
Min - Max 容斥,容斥完发现不能直接枚举子集了,考虑 dp 来计算系数。
我们要求的实际上是与 T 相交的区间总和,考虑枚举这个区间总和,来计数 T 。
设 f_{i,j} 为遍历到 i ,有 j 个区间与填充方案不相交的容斥系数和,再设 g_{i,j} 为完全包含于 [i,j] 的区间个数。
则转移 -f_{k,j-g_{k+1,i-1}}\to f_{i,j} 。
然后做完了,复杂度 O(n^3) 。
Min - Max 容斥和 gcd
设 t_i = \displaystyle\prod p_i^{z_i} ,观察到 \text{lcm}(t_1,t_2,...,t_n)=\displaystyle\prod p_i^{\max(z_1,z_2,...,z_n)} 。
对这个指数进行 Min - Max 容斥, \text{lcm} (S)=\displaystyle\prod p_i^{\sum(-1)^{|T|-1}\min(T)}=\displaystyle\prod (\displaystyle\prod p_i^{\min(T)})^{(-1)^{|T|-1}}=\displaystyle\prod \gcd(T)^{(-1)^{|T|-1}} 。
「BZOJ4833」最小公倍佩尔数
好难的题,这里只讲大概思路,证明略。
结论 1:f_n=2f_{n-1}+f_{n-2} 。
结论 2:f_{n+m}=f_{n+1}f_{m}+f_{n}f_{m-1} 。
结论 3:\gcd(f_n,f_m)=f_{\gcd(n,m)} 。
结论 4:\gcd(f_n,f_{n+1})=1 。
由 Min - Max 容斥可得,g_n = \displaystyle\prod \gcd\limits_{i \in T}f_i^{(-1)^{|T|-1}} ,然后由结论 3 得到 \displaystyle\prod f(\gcd(T))^{(-1)^{|T|-1}} = \displaystyle\prod f_i^{\sum[\gcd(T)=i](-1)^{|T|-1}} 。
由结论 4 加上莫比乌斯反演,最后的式子就是 \displaystyle \prod\limits_{d=1}^n \displaystyle \prod\limits_{i|d} f_i^{\mu(\frac{d}{i})} ,这个可以直接求,复杂度 O(n \log n) 。
「CF1687E」Become Big For Me
牛牛题。
考虑到 \omega(V) \le 8 ,考虑从 S 中选一个数 x ,把 x 质因数分解,并且把每个质因数 p_i 最小的 y \in S 选进一个小集合,这样就可以用一个大小 \le 9 的集合替代 S ,且 \gcd 相同。
注意到 \gcd(a_i\times a_j) 每个质因子的指数应该是每个质因子出现次数的最小值和次小值的和。最小值即为 \gcd(a_i) ,次小值就是所有值除去 \gcd(a_i) 的最小值,记 \gcd(a_i)=G ,所以说 \gcd(a_i\times a_j) = G^2 \displaystyle\prod\dfrac{\gcd_{i \ne j}(a_j)}{G} 。
注意到 \dfrac{\gcd_{i \ne j}(a_j)}{G} \ne 1 的项最多只有 8 项,证明同上面类似,所以可以暴力把这些项的答案求出来。
复杂度 O(n \log V + n \sqrt V \omega(V) + \omega(V)2^{\omega(V)}) 。
Min - Max 扩展形式
Min - Max 容斥得扩展形式可以解决第 k 大(小)类问题。
\text{kmax}(S)=\displaystyle\sum\limits_{T \subset S,|T| \ge k} (-1)^{|T|-k} \begin{pmatrix} |T|-1 \\ k-1 \end{pmatrix} \min(T)\\
\text{kmin}(S)=\displaystyle\sum\limits_{T \subset S,|T| \ge k} (-1)^{|T|-k} \begin{pmatrix} |T|-1 \\ k-1 \end{pmatrix} \max(T)
同样地,这个形式在期望下也成立。
证明
考虑构造一个容斥系数数组 g ,满足 \text{kmax}(S)=\displaystyle\sum\limits_{T \subset S} g_{|T|} \min(T) 。
记 S 中元素从大到小分别为 x_1,...,x_m ,那么对于 x_i ,其在等式左侧的贡献为 [i=k] ,在右侧的贡献为 \displaystyle\sum\limits_{j=0}^{i-1} \begin{pmatrix} i-1 \\ j \end{pmatrix} g_{j+1} ,转化为 [i=k]=\displaystyle\sum\limits_{j=0}^{i-1} \begin{pmatrix} i-1 \\ j \end{pmatrix} g_{j+1} 。
记 F_i = [i+1=k],G_i=g_{i+1} ,则 F_i=\displaystyle\sum\limits_{j=0}^{i} \begin{pmatrix} i \\ j \end{pmatrix} G_j 。
二项式反演,得到 G_i=\displaystyle\sum\limits_{j=0}^{i}(-1)^{i-j} \begin{pmatrix} i \\ j \end{pmatrix} F_j = (-1)^{i-k+1} \begin{pmatrix} i \\ k-1 \end{pmatrix} 。
所以 g_i=G_{i-1}=(-1)^{i-k} \begin{pmatrix} i-1 \\ k-1 \end{pmatrix} 。
「Luogu P4707」重返现世
首先注意到 n-k 很小,考虑把前 k 小改为求前 k 大,下文的 k 代指 n-k 。
Min - Max 容斥,问题转化为求 \displaystyle\sum\limits_{T \subset S,|T| \ge k} (-1)^{|T|-k} \begin{pmatrix} |T|-1 \\ k-1 \end{pmatrix} \min(T) 。
考虑设计 dp 来计算容斥系数。
观察到 m 并不大,考虑枚举集合 T 的选中概率 P_T 。
具体来说,我们定义 f_{i,j,k} 代表考虑到前 i 个物品,P_T=j ,容斥系数的总和。
考虑转移:
不选第 i 个物品:f_{i-1,j,k} \to f_{i,j,k} 。
选第 i 个物品,注意到 \begin{pmatrix} |T| \\ k-1 \end{pmatrix} 可以拆成 \begin{pmatrix} |T|-1 \\ k-1 \end{pmatrix}+\begin{pmatrix} |T|-1 \\ k-2 \end{pmatrix} ,那么转移就是 f_{i-1,j-p_i,k-1} - f_{i-1,j-p_i,k} \to f_{i,j,k} 。
最后考虑边界情况,把 f_{0,0,k} 设成 -1 即可,复杂度 O(nm(n-k)) 。