min-max 容斥 练手题。
发现要求的是:
使用 min-max 容斥得到:
注意到 $n\le 18$,于是考虑直接暴力容斥,求出每个子集 $S$ 的 $\displaystyle E(\min_{i\in S} t_i) $。
设计状态 $f(i)$ 表示从 $i$ 走到第一次走到 $S$ 中任意点的期望步数,
1.对于 $i\in S$,有 $f(i)=0$。
2.对于 $i\notin S$,有 $\displaystyle f(i)=1+\frac{1}{\deg(i)}\sum_{(i,j)\in E} f(j)$。
可以高斯消元,但是时间复杂度就变成 $\mathcal O(n^3 2^n)$ 的,不能接受。
先考虑叶子节点 $i$,它们的值只会与父亲有关(或者 $f(i)=0$),有 $f(i)=A_i f(p_i) +B_i$,其中 $A_i=1,B_i=1$。而我们接着考虑叶子的父亲节点 $i$:
变换一下:
于是我们将叶子的父亲节点 $i$ 也表示成了类似于 $\displaystyle f(i)=A_i f(p_i) +B_i$ 的形式,其中 $\displaystyle A_i=\frac{1}{\deg(i)-\sum_j{A_j}},B_i=\frac{\deg(i)+\sum_j B_j}{\deg(i)-\sum_j A_j}$。
以此类推,我们从下往上可以推出所有节点的 $A_i,B_i$,我们直接以 $x$ 为根,因为 $x$ 没有父节点,所以:
于是对与每个 $S$ dfs 一遍即可求出对应的 $f(x)$,时间复杂度为 $\mathcal O(n2^n)$。
但是我们要求的是 $\displaystyle \sum_{T\subseteq S}(-1)^{|T|-1} E(\min_{i\in T} t_i)$,对于每个询问求一次是 $\mathcal O(2^n)$ 的。对于这个式子,我们显然可以在预处理出所有 $\displaystyle (-1)^{|T|-1} E(\min_{i\in T} t_i)$ 后,做一次 FMT,即可 $\mathcal O(1)$ 回答询问。
代码非常好写。
Code
1 |
|