Min - Max 容斥小记

· · 算法·理论

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 是非空子集。

证明

对第一个式子(第二个同理),给一个自己的感性证明:

值得注意的是,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_ii 的期望次数,则 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」最小公倍佩尔数

好难的题,这里只讲大概思路,证明略。

由 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)

同样地,这个形式在期望下也成立。

证明

「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,容斥系数的总和。

考虑转移:

最后考虑边界情况,把 f_{0,0,k} 设成 -1 即可,复杂度 O(nm(n-k))