组合数
基本计算方式:
$${n \choose m}={n-1 \choose m} + {n-1 \choose m-1}=\frac{n!}{m!(n-m)!}=\frac{n^{\underline{m}}}{m!}$$
与组合数的行相关的公式:
$${n \choose m}=\sum\limits_{i=0}^{n-1} {i \choose m-1}$$
与组合数的斜线相关的公式:
$${n \choose m}=\sum\limits_{i=0}^{m}{n-m-1+i \choose i}$$
Lucas定理:
$${n \choose m}={\lfloor \frac{n}{p} \rfloor \choose \lfloor \frac{m}{p} \rfloor}{n \bmod p \choose m \bmod p} \bmod p$$
可以形象的视作将$n$和$m$拆成$p$进制后,每个对应数位的组合数相乘的结果。
二项式反演:
$$a_i=\sum\limits_{j=0}^i{i \choose j}b_j$$
$$b_i=\sum\limits_{j=0}^i(-1)^{i-j}{i \choose j}a_j$$
广义容斥原理:
$$a_i=\sum\limits_{j=i}^n{j \choose i}b_j$$
$$b_i=\sum\limits_{j=i}^n(-1)^{j-i}{j \choose i}a_j$$
斯特林数
基本计算方式:
$$\begin{bmatrix}n \\ m \end{bmatrix}=\begin{bmatrix}n-1 \\ m-1 \end{bmatrix}+(n-1)\begin{bmatrix}n-1 \\ m \end{bmatrix}$$
$${n \brace m}={n-1 \brace m-1}+m{n-1 \brace m}$$
第一类斯特林数的单行求法
根据第一类斯特林数是上升阶乘幂展开式的系数,有
$$\sum_{i=0}^n \begin{bmatrix} n \\ m \end{bmatrix}x^i=\prod_{i=0}^{n-1}(x+i)$$
于是可以分治$FFT$求出一行。
第二类斯特林数的直接展开式:
$${n \brace m}=\frac{1}{m!}\sum\limits_{k=0}^{m}(-1)^{m-k}{m \choose k}k^n$$
上式可以转化成可以$FFT$的形式:
$${n \brace m}=\sum\limits_{k=0}^m \frac{(-1)^{m-k}}{(m-k)!} \frac{k^n}{k!}$$
下降幂、通常幂与上升幂之间的转化:
$$x^n=\sum\limits_{k=0}^{n}{n \brace k}x^{\underline{k}}=\sum\limits_{k=0}^{n}(-1)^{n-k}{n \brace k}x^{\overline{k}}$$
$$x^{\overline{n}}=\sum\limits_{k=0}^{n}\begin{bmatrix} n \\ k \end{bmatrix}x^k$$
$$x^{\underline{n}}=\sum\limits_{k=0}^{n}(-1)^{n-k}\begin{bmatrix} n \\ k \end{bmatrix}x^k$$
把幂换成某些奇妙的函数,就得到了传说中的斯特林反演......
一些图计数相关
有标号无向连通图:
设答案为$f_n$,那么考虑容斥所有不合法方案,即不联通的方案。
于是,枚举$1$节点所在的联通块:
$$f_n=2^{n \choose 2}-\sum\limits_{i=1}^{n-1}{n-1 \choose i-1}2^{n-i \choose 2}f_i$$
于是可以分治FFT。$O(nlog^2)$.
或者,继续化简这个式子:
$$f_n = 2^{n \choose 2}-\sum\limits_{i=1}^{n-1}\frac{(n-1)!}{(i-1)!(n-i)!}2^{n-i \choose 2}f_i $$
$$\frac{f_n}{(n-1)!} = \frac{2^{n \choose 2}}{(n-1)!}-\sum\limits_{i=1}^{n-1}\frac{f_i}{(i-1)!}\frac{2^{n-i \choose 2}}{(n-i)!}$$ $$\frac{2^{n \choose 2}}{(n-1)!} = \sum\limits_{i=1}^{n}\frac{f_i}{(i-1)!}\frac{2^{n-i \choose 2}}{(n-i)!}$$
于是令$G(x)=\sum\frac{f_i}{(i-1)!}$,$C(x)=\sum\frac{2^{i \choose 2}}{i!}$,$F(x)=\sum\frac{2^{i \choose 2}}{(i-1)!}$,那么有
$$F(x)=G(x)*C(x)$$
于是可以多项式求逆。$O(nlogn)$.
或者,认为无向连通图是无向图的一个划分,即一个无向图可以表示成若干个无向连通图。
于是令$C(x)$为无向连通图个数的生成函数,$G(x)$为连通图个数的生成函数,则有如下关系:
$$G(x)=e^{C(x)}$$
也就是说
$$C(x)=\ln G(x)$$
于是可以多项式求$\ln$。$O(nlogn)$。
欧拉回路图计数
存在欧拉回路的条件为联通且点度数均为偶数。
由于最后一个点可以任意连边使得度数条件满足均为偶数,那么有度数为偶数的图的方案数$F_n=2^{n-1 \choose 2}$。
于是可以使用求解无向连通图个数的任意方法进行求解。
有标号DAG(有向无环图)计数
令答案为$f_n$,考虑枚举度数为$0$的节点的数量。
由于无法保证递推下去的$f_{n-i}$中有多少个度数为$0$的点,因此加入一个容斥系数。
$$f_n=\sum\limits_{i=1}^n (-1)^{i-1}{n \choose i}2^{i*(n-i)}f_{n-i}$$
将$i*(n-i)$拆成$\frac{n^2-i^2-(n-i)^2}{2}$,于是有
$$f_n = \sum\limits_{i=1}^{n-1}(-1)^{i-1}\frac{n!}{i!(n-i)!}\frac{2^{\frac{n^2}{2}}}{2^{\frac{i^2}{2}}2^{\frac{(n-i)^2}{2}}}f_{n-i} $$
$$ \frac{f_n}{2^{\frac{n^2}{2}}n!} = \sum\limits_{i=1}^{n-1}\frac{(-1)^{i-1}}{2^{\frac{i^2}{2}}i!}\frac{f_{n-i}}{2^{\frac{(n-i)^2}{2}}(n-i)!}$$
于是可以分治FFT。
有标号弱联通DAG计数
令有标号DAG数为$F_n$,弱联通有标号DAG数为$f_n$,那么有
$$f_n= F_n-\sum\limits_{i=1}^{n-1}{n-1 \choose i-1}F_{n-i}f_i$$
真眼熟不是吗?
于是方法同无向连通图个数。
未完待续...