二.反演原理
0.综述
说一下个人对反演的理解。
反演是一种手段,一种处理已知信息和未知信息关系的手段,用来得到未知信息的方式。也就是以一种既定的手段在较小的时间复杂度内用已知的信息得到未知的信息。
还有$zsq$学长更加浅显的解读。
反演一般就是把一个好看但难算的式子转化成一个难看且难算的式子在转化为一个难看但好算的式子。
先来一个裸一点的反演
下面要说我知道的四种反演。
子集反演,针对的是集合交并的容斥。
二项式反演,针对组合原理的容斥。
莫比乌斯反演,针对约数和倍数的容斥。
斯特林反演,针对集合划分的容斥。
最值反演($Min\_Max$容斥),针对集合元素出现的最值的反演。
1.子集反演。
$$g(S)=\sum\limits_{T\subseteq S}f(T)$$
$$f(S)=\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}g(T)$$
这个是裸的容斥,证明的话,奇加偶减自己想想就明白了。
$fr.$小星星。
直接算很麻烦很麻烦很麻烦所以考虑大力容斥可以喵。
限制很多还是$dp$然后,设$dp[i][j][S]$为以$i$为根的子树,$i$在原图中对应了$j$,子树里所有的点都在对应$S$集合中的点,不要求子树一一对应,随便怎么对应都可以的方案。
这个$O(n^3)tree dp$就能够得到。
会有很多点被重复对应,我们显然要容斥。
然后这里学长讲的时候说是随便$yy$了个容斥系数,但是其实这个系数是用子集反演得到的。
设$f(S)$为集合$S$中的没一个元素都有被对应的方案数。
设$g(S)=\sum\limits_{i\subseteq S}dp[1][i][S]$也就是$S$的方案数。
那么:
$$g(S)=\sum\limits_{T\subseteq S}f(T)$$
子集反演得到:
$$f(S)=\sum\limits_{T\subseteq S}(-1)^{\left|T\right| - \left|S\right|}g(T)$$
设$S$为$n$个点的全集,那么我们求得就是:
$$ans=f(S)$$
枚举集合$T$容斥+$dp$即可解决。
复杂度$O(n^32^n)$
$se.$与$FWT$结合,我还没有做过题。