min-max容斥
描述
对于一个集合 $S$ 有
$$
\begin{align}
\max(S) &= \sum_{T \subseteq S} (-1)^{|T|+1} \min(T) \
\min(S) &= \sum_{T \subseteq S} (-1)^{|T|+1} \max(T)
\end{align}
$$
其中 $\max(S)$ 表示集合 $S$ 中的最大元素,$\min(S)$ 表示 $S$ 中的最小元素
证明略
在期望下也成立
$$
\begin{align}
E(\max(S)) &= \sum_{T \subseteq S} (-1)^{|T|+1} E(\min(T)) \
E(\min(S)) &= \sum_{T \subseteq S} (-1)^{|T|+1} E(\max(T))
\end{align}
$$
不会证
例题
随机游走
题意
给定一棵 $n$ 个点的树和起点 $x$,每次会等概率地走到相邻的点。
有 $Q$ 次询问,每次给定一个点集 $S$,求经过 $S$ 中每个点至少一次的期望步数。
$x$ 视为一开始就被经过一次。
对 $998244353$ 取模
$n\le 18, Q\le 5000$
做法
记 $t_i$ 表示第一次经过点 $i$ 的时间(不是期望)
假设询问的集合是 ${a_1,a_2,\dotsc,a_k}$
令 $S={t_{a_1},t_{a_2},\dotsc,t_{a_k}}$
答案即为 $E(\max(S))$
根据上面的等式,问题转化为求
$$
\sum_{T \subseteq S} (-1)^{|T|+1} E(\min(T))
$$
假如求出了每个 $E(\min(T))$,直接枚举复杂度是 $\mathcal O(3^n)$,高维前缀和 $\mathcal O(n\times 2^n)$
考虑如何求一个 $E(\min(T))$,这等于走到 $T$ 中任意一个点即停止的期望步数
令 $f_u$ 表示从 $u$ 出发的期望步数,因此 $E(\min(T))=f_x$
以 $x$ 为根,记 $u$ 的度数为 $d_u$,$u$ 的父亲为 $fa_u$
对于 $u\in T$ 有 $f_u=0$
对于一般的节点 $u$,有
$$
f_u=\frac{f_{fa_u}+\sum_{v \text{是} u \text{的儿子}} f_v}{d_u}+1
$$
显然任意一个 $u\in T$ 的子树都不需要考虑
直接高斯消元是 $\mathcal O(n^3)$ 的
对于树上的问题有更好的做法
设 $f_u=a_u f_{fa_u}+b_u$
显然对于 $u\in T$ 有 $a_u=b_u=0$
假设我们已经求出 $u$ 每个儿子 $v$ 的 $a_v, b_v$
代入有
$$
d_u f_u=f_{fa_u}+ \left(\sum_{v \text{是} u \text{的儿子}} a_v f_u \right)+ \left(\sum_{v \text{是} u \text{的儿子}} b_v \right) +d_u
$$
整理得到
$$
f_u=\frac{f_{fa_u} + \left( \sum_{v \text{是} u \text{的儿子}} b_v \right) + d_u}{d_u-\sum_{v \text{是} u \text{的儿子}} a_v}
$$
因此
$$
a_u = \frac{1}{d_u-\sum_{v \text{是} u \text{的儿子}} a_v} ,
b_u = \frac{d_u+ \sum_{v \text{是} u \text{的儿子}} b_v}{d_u-\sum_{v \text{是} u \text{的儿子}} a_v}
$$
根节点 $x$ 没有父亲,即 $f_x=b_x$
单次时间 $\mathcal O(n \times \log 998244353)$
总复杂度 $\mathcal O(n \times \log 998244353 \times 2^n)$
代码
1 |
|
按位或
题意
你有一个数字 $0$,每秒你会以 $p_i$ 的概率选择 $i$,$i\in[0,2^n-1]$,和自己的数进行按位或,问期望多少秒后数字变成 $2^n-1$
$n\le20,\sum p_i=1$
做法
不用 min-max容斥的做法在 这里.
网上很多我就不写了