1 二项式反演
1.1 引入
二项式反演与容斥原理有着很大的联系,在很大程度上二项式反演可以实现容斥的效果。
我们先从基础的容斥原理讲起,首先二元的容斥形式非常简单,如下:
\[|A\cup B|=|A|+|B|-|A\cap B|
\]
更一般的,我们有:
\[|A_1\cup A_2\cup\cdots\cup A_n|=\sum_{1\le i\le n} |A_i|-\sum_{1\le i<j\le n} |A_i\cap A_j|+\cdots+(-1)^{n-1}\times |A_1\cap A_2\cap \cdots \cap A_n|
\]
这就是容斥原理。
证明:设某一个元素被 \(m\) 个集合包含,则其对等号左边贡献为 \(1\),对右边的贡献为:
\[\begin{aligned}
\sum_{i=1}^m (-1)^{i-1}\binom {m}{i}&=-\sum_{i=1}^m (-1)^i\binom mi\\
&=1-\sum_{i=0}^m\binom mi (-1)^i\\
&=1-(1-1)^m\\
&=1
\end{aligned}
\]
所以每个元素对等式左右两边的贡献相等。
1.2 基本形式
1.2.1 形式零
首先我们可以直接从容斥原理推出二项式反演的形式零。记 \(\overline{A}\) 表示 \(A\) 在全集 \(U\) 下的补集,由集合基本知识:
\[\begin{aligned}
|U|-|\bigcap_{i=1}^n \overline{A_i}|=|\bigcup_{i=1}^n A_i|\\
|U|-|\bigcup_{i=1}^n \overline{A_i}|=|\bigcap_{i=1}^n A_i|\\
\end{aligned}
\]
可以得到:
\[\begin{aligned}
|\overline{A_1}\cup \overline{A_2}\cup\cdots\cup \overline{A_n}|=|U|-\sum_{1\le i\le n} |A_i|+\sum_{1\le i<j\le n} |A_i\cap A_j|+\cdots+(-1)^{n}\times |A_1\cap A_2\cap \cdots \cap A_n|\\
|A_1\cup A_2\cup\cdots\cup A_n|=|U|-\sum_{1\le i\le n} |\overline{A_i}|+\sum_{1\le i<j\le n} |\overline{A_i}\cap \overline{A_j}|+\cdots+(-1)^{n}\times |\overline{A_1}\cap \overline{A_2}\cap \cdots \cap \overline{A_n}|
\end{aligned}
\]
考虑一种特殊的情况,即集合的交集大小只和集合的数量有关,那么我们可以令:
- \(f(n)=|A_1\cap A_2\cap \cdots \cap A_n|\)。
- \(g(n)=|\overline{A_1}\cap \overline{A_2}\cap \cdots \cap \overline{A_n}|\)。
根据上面两个式子不难得到:
\[\begin{aligned}
f(n)=\sum_{i=0}^n (-1)^i \binom{n}i g(i)\\
g(n)=\sum_{i=0}^n (-1)^i \binom{n}i f(i)
\end{aligned}
\]
显然两者等价且可以互相推导,于是我们可以得出二项式反演的形式零:
\[f(n)=\sum_{i=0}^n (-1)^i \binom{n}i g(i)\iff g(n)=\sum_{i=0}^n (-1)^i \binom{n}i f(i)
\]
1.2.2 形式一
上面的的形式零并不常见,更常用的形式需要我们做一些变形。
设两个函数 \(f(n),h(n)\) 满足形式零,然后令 \(g(n)=h(n)(-1)^n\),则形式零会变为:
\[f(n)=\sum_{i=0}^n \binom{n}i g(i)\iff \dfrac{g(n)}{(-1)^n}=\sum_{i=0}^n (-1)^i \binom{n}i f(i)
\]
移项可得:
\[f(n)=\sum_{i=0}^n \binom{n}i g(i)\iff g(n)=\sum_{i=0}^n (-1)^{n+i} \binom{n}i f(i)
\]
我们给等式右边除以 \((-1)^{2i}\),由于 \(2i\) 一定为偶所以不改变正负性,然后我们就可以得到二项式反演的形式一:
\[f(n)=\sum_{i=0}^n \binom ni g(i)\iff g(n)=\sum_{i=0}^n (-1)^{n-i}\binom ni f(i)
\]
1.2.3 形式二
形式一中的和式是对 \(0\sim n\) 求和,那么如果对于 \(n\sim m\) 求和就可以得到二项式反演的形式二:
\[f(n)=\sum_{i=n}^m \binom{i}{n} g(i)\iff g(n)=\sum_{i=n}^m (-1)^{i-n}\binom in f(i)
\]
证明:直接将右式代入左式可得:
\[\begin{aligned}
f(n)&=\sum_{i=n}^m \binom{i}{n}\sum_{j=i}^m (-1)^{j-i}\binom ji f(j)\\
&=\sum_{i=n}^m\sum_{j=i}^m \binom{i}{n} (-1)^{j-i}\binom ji f(j)\\
&=\sum_{j=n}^m f(j)\sum_{i=n}^j (-1)^{j-i}\binom{i}{n}\binom ji \\
&=\sum_{j=n}^m f(j)\sum_{i=n}^j (-1)^{j-i}\binom{j-n}{j-i}\binom jn\\
&=\sum_{j=n}^m \binom jnf(j)\sum_{i=n}^j (-1)^{j-i}\binom{j-n}{j-i}\\
&=\sum_{j=n}^m \binom jnf(j)\sum_{i=0}^{j-n} \binom{j-n}{i}(-1)^{i}\\
&=\sum_{j=n}^m \binom jnf(j)(1-1)^{j-n}\\
&=\sum_{j=n}^m \binom jnf(j)[j=n]\\
&=\binom nnf(n)\\
&=f(n)\\
\end{aligned}
\]
于是原式成立。
1.3 例题
例 1 [BZOJ4665] 小 w 的喜糖
\(\text{Link}\)
首先我们先认为相同的糖是不同的,这样算出答案之后乘上 \(\prod \tfrac{1}{c_i!}\) 即可,其中 \(c_i\) 为第 \(i\) 种颜色个数。
接下来考虑二项式反演,令 \(f(i)\) 表示至少 \(i\) 个人拿到的糖与原先的种类相同的方案数,\(g(i)\) 表示恰有 \(i\) 个人拿到的糖与原先种类相同的方案数,根据二项式反演可得:
\[f(n)=\sum_{i=n}^N \binom{i}{n} g(i)\iff g(n)=\sum_{i=n}^N (-1)^{i-n}\binom in f(i)
\]
于是只需求出 \(f(i)\) 即可,我们考虑 dp 求出它。设 \(dp(i,j)\) 表示枚举到第 \(i\) 种颜色,钦定了 \(j\) 个人拿到的糖与原先种类相同,转移为:
\[dp(i,j)=\sum_{p=0}^{\min(j,c_i)}dp(i-1,j-p)\times \binom{c_i}{p}\times {c_i}^{\underline{p}}
\]
而 \(f(i)\) 就等于 \(dp(m,i)\times (n-i)!\),代入求出 \(g(0)\) 即可,复杂度 \(O(n^2)\)。
通过此例不难发现,“至少” 转 “恰好” 是二项式反演的一个重要运用场合。
2 斯特林反演
前置知识:斯特林数相关。
2.1 基本形式及证明
斯特林反演的基本形式与二项式反演类似,如下:
\[f(n)=\sum_{i=0}^n {n\brace i} g(i)\iff g(n)=\sum_{i=0}^n (-1)^{n-i} {n\brack i} f(i)
\]
为了证明这个定理,我们需要先证明一个引理,称为反转公式:
\[\begin{aligned}
\sum_{k=m}^n (-1)^{k-m}{n\brace k} {k\brack m} =[m=n]\\
\sum_{k=m}^n (-1)^{n-k}{n\brack k} {k\brace m}=[m=n]
\end{aligned}
\]
我们将 \(m^n\) 转化为下降幂的形式,然后再将下降幂转回普通幂:
\[\begin{aligned}
m^n&=\sum_{i=0}^n {n\brace i}m^{\underline i}\\
&=\sum_{i=0}^n {n\brace i}\sum_{j=0}^i (-1)^{i-j}{i\brack j}m^j\\
&=\sum_{i=0}^n m^i\sum_{j=i}^n (-1)^{j-i}{j\brack i}{n\brace j}\\
\end{aligned}
\]
为了使左右两边相等,我们需要满足 \(\sum\limits_{j=i}^n (-1)^{j-i} {j\brack i}{n\brace j}\) 只有在 \(i=n\) 时取到 \(1\),其余时候都取 \(0\),即它的值是 \([i=n]\)。重新换元后即可得到:
\[\sum_{k=m}^n (-1)^{k-m}{n\brace k} {k\brack m} =[m=n]
\]
对于下面的式子,我们将 \(m^{\underline{n}}\) 转化为普通幂的形式,再转化回下降幂的形式:
\[\begin{aligned}
m^{\underline{n}}&=\sum_{i=0}^n (-1)^{n-i} {n\brack i}m^i\\
&=\sum_{i=0}^n (-1)^{n-i} {n\brack i}\sum_{j=0}^i{i\brace j} m^{\underline{j}}\\
&=\sum_{i=0}^n m^{\underline{i}} \sum_{j=i}^n(-1)^{n-j}{n\brack j}{j\brace i} \\
\end{aligned}
\]
同上,只有当 \(\sum_{j=i}^n(-1)^{n-j}{n\brack j}{j\brace i}=[i=n]\) 时两边才能取等,换元后即可得到下面的式子。
接下来我们证明反演公式,先证 \(\Leftarrow\),若 \(g(n)=\sum\limits_{i=0}^n (-1)^{n-i} {n\brack i} f(i)\),则有:
\[\begin{aligned}
f(n)&=\sum_{i=0}^n[i=n]f(i)\\
&=\sum_{i=0}^n f(i)\sum_{j=i}^n (-1)^{j-i}{n\brace j}{j\brack i}\\
&=\sum_{i=0}^n {n\brace i}\sum_{j=0}^i (-1)^{i-j}{i\brack j}f(j)\\
&=\sum_{i=0}^n {n\brace i}g(i)\\
\end{aligned}
\]
接下来证明 \(\Rightarrow\),若 \(f(n)=\sum\limits_{i=0}^n {n\brace i} g(i)\),则有:
\[\begin{aligned}
g(n)&=\sum\limits_{i=0}^n [i=n]g(i)\\
&=\sum_{i=0}^n g(i)\sum_{j=i}^n (-1)^{n-j}{n\brack j}{j\brace i}\\
&=\sum_{i=0}^n (-1)^{n-i}{n\brack i}\sum_{j=0}^i {i\brace j}g(j)\\
&=\sum_{i=0}^n (-1)^{n-i}{n\brack i}f(i)\\
\end{aligned}
\]
于是斯特林反演的公式得证。
同理,斯特林反演还有另一种形式:
\[f(n)=\sum_{i=n}^{m} {i\brace n} g(i)\iff g(n)=\sum_{i=n}^m (-1)^{i-n} {i\brack n} f(i)
\]
这与二项式反演的形式二也是相似的。
2.2 例题
例 1 [BZOJ4671] 异或图
\(\text{Link}\)
令 \(f(n)\) 表示将原图划分为至少 \(n\) 个互不相连的部分的方案数,$g(n) $ 表示将原图划分为 \(n\) 个联通块的方案数。那么我们显然会有:
\[f(n)=\sum_{i=n}^N {i\brace n} g(i)
\]
意思是将 \(i\) 个联通块划分成 \(n\) 个部分,显然这 \(n\) 个部分之间一定互不相连,根据斯特林反演可得:
\[g(n)=\sum_{i=n}^N (-1)^{i-n}{i\brack n} f(i)
\]
于是我们求出 \(f(n)\) 即可求出最终答案。考虑怎样求 \(f(n)\),由于我们的点数只有 \(10\),所以我们完全可以直接爆搜,将这些点分成 \(n\) 个部分。接下来我们只需要让这 \(n\) 个部分之间没有连边即可。将每一张图上这 \(n\) 个部分的连边保存下来,其余的置为 \(0\),现在的问题就是求有多少种方案使得选出来的图的异或和为 \(0\)。
显然这是线性基可以求解的问题,将所有数插入线性基,设成功了 \(k\) 次,则贡献即为 \(2^{s-k}\)。然后求出 \(f(n)\) 后代入公式求出 \(g(1)\) 即为答案。