笔记:min-max 容斥
min-max 容斥笔记
原理
给定一个集合 \(U\) ,对于其一个子集 \(S\) ,设 \(\min(S)\) 为 \(S\) 内部的最小值,\(\max(S)\) 为 \(S\) 内部的最大值,有关系:
推导一下,以最小值(第一个式子)的容斥为例,先考虑 \(S\) 互不相同的情况,设 \(S_{1,2,\cdots |S|}\) 中最小值的下标是 \(S_k\) 。
若 \(\max(T)=\min(S)\) ,则只有可能 \(T=\{s_k\}\) ,此时 \((-1)^{|T|+1}=1\) 。
若 \(\max(T)\) 是其他值,不妨设为 \(A\) ,我们设 $U = {s_i | s_i < \max(T)} $ ,有 \(|U|>0\) ,则使 \(\max(T)=A\) 的集合就有 \(2^{|U|}\) 种,这其中大小为奇数的数量和偶数的数量是相等的,根据式子,互相抵消了。
为什么 \(\max(T)=\min(S)\) 时没有互相抵消,因为此时 \(|U|=0\) ,没有能抵消的。
若 \(S\) 元素可以相同,我们加入下标为第二关键字,将 \(S\) 变为互不相同的即可。
性质:这个式子对期望也是成立的。
扩展
试求 \(\operatorname{kthmax(S)}\) ,先说结论:
我们求出 \(\operatorname{kthmax(S)}=\sum F(|T|) \min(T)\) 。考虑 \(\min(T)\) 是 \(S\) 中的第 \(p\) 大,那 \(\min(T)\) 的贡献总系数是:
我们需要 \(g(p)=[p=k]\) ,改一下这个式子:
是二项式反演,转换一下( \(g(p+1)=[p=k-1]\) ):
同样,对期望成立。
例题
有时候求一边容易,求另一边很难,就可以这样容斥。
[HAOI2015] 按位或
计数器 \(a\) 初始为 \(0\) ,每一次随机选择 \([0,2^n-1]\) 的一个数字 \(k\) ,选则 \(k\) 的概率是 \(p_k\) ,且 \(\sum p_i=1\) ,令 $a=a | k $ ,期望多少次后 \(a\) 变成 \(2^k-1\) ,\(n \leq 20\)。
- 题解
一个误区:\(E(\max(a,b)) \not ={\max(E_a,E_b)}\) ,所以不能直接求每一位变成 \(1\) 的期望直接取最大。
我们肯定要求 \(E(\max(U))\) ,即全集下最后一个元素变成 \(1\) 的期望时间,对其容斥后变成求 \(E(\min(S))\) ,有:
也就是前 \(k-1\) 秒都没有 \(S\) 中的元素,第 \(k\) 秒出现了,于是:
即一次操作后只选择了 \(S\) 的子集的概率,这个可以预处理,不妨设这两个概率为 \(A,B\) :
\(B<1\) ,后面的式子收敛,同时 \(A=(1-B)\) ,最后:
求 \(P(S)\) 用子集和就行了。
事实上这个式子是离散几何分布的期望,有 \(E(X)=\frac{1}{P(X)}\) 。
宾果游戏
集训赛的题目,可以放上来吗(
一个 \(n \times m\) 的表格,一些格子被特殊标记。每时刻等概率随机选一个格子,若不是被标记的格子,就涂黑,否则什么也不做。期望多少次后有一行或一列被涂黑。
\(nm \leq 10^6\)
- 题解
把行,列标号,标成 \(n+m\) 个构成集合 \(U\) ,我们要求 \(E(\min(U))\) ,很难求出,容斥一下,变为求 \(E(\max(S))\) 。
能得出 \(E(\max(S))\) 表示将一些行,一些列组成的网络全部涂黑的期望次数。可能的 \(S\) 很多,但网络格子数是有限的,实际上 \(E(\max(S))=E(\operatorname{cnt(S)})\) ,\(\operatorname{cnt(S)}\) 表示 \(S\) 代表的网格有多少个格子,若 \(S\) 有 \(r\) 行 \(c\) 列,\(\operatorname{cnt(S)}=mr+nc-rc\) ,我们可以预处理出每个 \(\operatorname{cnt(S)}\) 有多少个 \(S\) 。
现在求 \(E(\operatorname{cnt(S)})\) 即涂上 \(\operatorname{cnt(S)}\) 个格子的期望,递推一下得到:
找出完全没有被标记的行列数量,枚举行列数量就行。
[PKUWC2018] 随机游走
对一棵树,从 \(x\) 点出发,随机游走,每次询问一个集合,问期望多少次能经过集合内的所有元素,\(n \leq 18\) 。
- 题解
这题的难点实际不在容斥上。
询问是一个 \(\max\) 的形式,转成 \(\min(S)\) 表示至少走到 \(S\) 内一个点的期望,现在求 \(\min(S)\) 。
从 \(x\) 起点,可以从上往下递推,设 \(f_u\) 为从 \(u\) 走,走到 \(S\) 的期望:
直接消元,复杂度 \(O(n^3 2^n)\) ,需要优化。
树上消元:树上的随机游走存在递推关系,我们设 \(f_u=k_u f_{fa}+b_u\) ,有:
移项转换得到:
就这样我们推出了 \(k_u,b_u\) ,可以发现这个式子只和儿子有关,搜索一遍就出来了。对于 \(u \in S\) ,其 \(f_u=0\) ,那么可以设 \(k_u=b_u=0\) ,对于根节点,它没有父节点,所以 \(f_{rt}=b_{rt}\) 。
现在我们求出 \(\min(S)\) 了,直接做个子集求和,询问就能直接输出。
复杂度 \(O(n2^n+Qn)\) ,忽略求逆元的部分。
对于树上的随机游走,通常存在递推公式代替消元

浙公网安备 33010602011771号