斯特林数
第一类
\(n\) 个数放入 \(m\) 个非空环排列中的方案数
\[\begin{bmatrix} n \\ m \end{bmatrix} = \begin{bmatrix} n - 1 \\ m - 1\end{bmatrix} + (n - 1) \begin{bmatrix} n - 1 \\ m \end{bmatrix}
\]
自己成为一个新环, 或者加入之前一个环,它有 \(n - 1\) 个前驱
第二类
\(n\) 个数放入 \(m\) 个非空集合中的方案数
\[\begin{Bmatrix} n \\ m \end{Bmatrix} = \begin{Bmatrix} n - 1 \\ m - 1\end{Bmatrix} + m\begin{Bmatrix}n - 1 \\ m \end{Bmatrix}
\]
考虑第 \(n\) 个数自己占一个集合,或者加入之前一个集合
通项公式
对非空这个条件进行容斥, 对所有集合标号
所有不合法集合的方案数是
\[\sum_{i = 1} ^ m (-1) ^ {i + 1} \binom m i (m - i) ^ n
\]
用所有方案 - 不合法方案
\[\binom m 0 m ^ n - \sum_{i = 1} ^ m (-1) ^ {i + 1}\binom m i (m - i) ^ n
\]
\[= \sum_{i = 0} ^ m (-1) ^ i \binom m i (m - i) ^ n
\]
去掉标号影响
\[\begin{Bmatrix} n \\ m \end{Bmatrix} = \frac 1 {m!} \sum_{i = 0} ^ m (-1) ^ i \binom m i (m - i) ^ n
\]
下降幂
\[n ^ {\underline{m}} = n(n - 1)...(n - m + 1)
\]
排列 \(A_n^m = n ^ {\underline{m}}\)
通常幂转下降幂
\[n ^ m = \sum_{i = 0} ^ m \begin{Bmatrix} m \\ i \end{Bmatrix} n ^ {\underline{i}}
\]
\(n^m\) 相当于选 \(m\) 个 \([1, n]\) 的数的方案数
枚举有多少个数相同,那就是把 \(m\) 个有标号的数放到 \(i\) 个组里,这 \(i\) 个数的方案数是 \(n ^ {\underline{i}}\)
上升幂
\[n ^ {\overline{m}} = n (n + 1)...(n + m - 1)
\]
上升幂转通常幂
\[x ^ {\overline{n}} = \sum_{k = 0} ^ n \begin{bmatrix} n \\ k \end{bmatrix} x ^ k
\]
这个式子直接证太复杂,用数学归纳法证明
\(n = 1\) 时等式显然成立
考虑 \(n - 1\) 时等式成立
\[x ^ {\overline{n}} = x ^ {\overline{n - 1}} (x + n - 1)
\]
\[= (x + n - 1) \sum_{k = 0} ^ {n - 1} \begin{bmatrix} n - 1 \\ k\end{bmatrix} x ^ k
\]
\[= \sum_{k = 0} ^ {n - 1} \begin{bmatrix} n - 1 \\ k \end{bmatrix} x ^ {k + 1} + \sum_{k = 0} ^ {n - 1} (n - 1) \begin{bmatrix} n - 1 \\ k \end{bmatrix} x ^ k
\]
让第一个式子枚举的 \(k = k + 1\)
\[x ^ {\overline{n}} = \sum_{k = 1} ^ n \begin{bmatrix} n - 1 \\ k - 1 \end{bmatrix} x ^ k + \sum_{k = 0} ^ {n - 1} (n - 1) \begin{bmatrix} n - 1 \\ k \end{bmatrix} x ^ k
\]
把两边的 \(x^k\) 提出来, 合并式子
\[x ^ {\overline{n}} = \sum_{k = 0} ^ n (\begin{bmatrix} n - 1 \\ k - 1 \end{bmatrix} + (n - 1)\begin{bmatrix} n - 1 \\ k \end{bmatrix})x ^ k
\]
\[= \sum_{k = 0} ^ n \begin{bmatrix} n \\ k \end{bmatrix} x ^ k
\]
证毕
上升幂下降幂互转
\[x ^ {\overline{n}} = (-1) ^ n (-x) ^ {\underline{n}}
\]
\[x ^ {\underline{n}} = (-1) ^ n (-x) ^ {\overline{n}}
\]
显然
快速求斯特林数
即给定\(n\),求\(\begin{bmatrix}n\\0\end{bmatrix},\begin{bmatrix}n\\1\end{bmatrix}\begin{bmatrix}n\\2\end{bmatrix}…\begin{bmatrix}n\\n\end{bmatrix}\)
\[x^{\overline{n}}=\sum\limits_{i}^{n}\begin{bmatrix}n\\i\end{bmatrix}x^i
\]
得到\(x^{\overline{n}}\)的\(i\)次项系数即为\(\begin{bmatrix}n\\i\end{bmatrix}\)
考虑倍增,我们有
\[x^{\overline{2n}}=x^{\overline{n}}(x+n)^{\overline{n}}
\]
我们将\(x^{\overline{n}}\)看作\(f(x)\),那么\((x+n)^{\overline{n}}\)即为\(f(x+n)\)
假设我们已经得到了\(f(x)\),其中\(i\)次项系数为\(a_i\),那么
\[f(x+n)=\sum\limits_{i=0}^{n}a_i(x+k)^i
\]
将右边二项式展开
\[=\sum\limits_{i=0}^{n}a_i\sum\limits_{j=0}^{i}\dbinom{i}{j}x^jn^{i-j}
\]
\[=\sum\limits_{i=0}^{n}x^i\sum\limits_{j=i}^{n}\dbinom{j}{i}n^{j-i}a_j
\]
\[=\sum\limits_{i=0}^{n}\frac{x^i}{i!}\sum\limits_{j=i}^{n}\frac{n^{j-i}}{(j-i)!}j!a_j
\]
最右明显是个卷积式了,不会卷可以看我这里的最后一步
给定\(n,k\)求 \(\begin{bmatrix}0\\k\end{bmatrix},\begin{bmatrix}1\\k\end{bmatrix},\begin{bmatrix}2\\k\end{bmatrix}…\begin{bmatrix}n\\k\end{bmatrix}\)
令\(F(x)\)是一个环的\(EGF\)
那么有
\[F(x)=\sum\limits_{i=1}^{n}\frac{(i-1)!}{i!}x^i=\sum\limits_{i=1}^{n}\frac{1}{i}
\]
那么
\[\begin{bmatrix}i\\k\end{bmatrix}=\frac{F(x)^k}{k!}i!
\]
注意这里常数项不为\(1\),要用加强版的多项式幂函数
给定\(n\) 求\(\begin{Bmatrix}n\\0\end{Bmatrix},\begin{Bmatrix}n\\1\end{Bmatrix},\begin{Bmatrix}n\\2\end{Bmatrix}…\begin{Bmatrix}n\\n\end{Bmatrix}\)
有通项
\[\begin{Bmatrix}n\\m\end{Bmatrix}=\sum\limits_{i=0}^{m}\frac{(-1)^{i}}{i!}\frac{(m-i)^n}{(m-i)!}
\]
设\(f_i\frac{(-1)^{i}}{i!},g_i=\frac{i^n}{i!}\)
\[\begin{Bmatrix}n\\i\end{Bmatrix}=[x^i]f*g
\]
给定\(n,k\) 求\(\begin{Bmatrix}0\\k\end{Bmatrix},\begin{Bmatrix}1\\k\end{Bmatrix},\begin{Bmatrix}2\\k\end{Bmatrix}…\begin{Bmatrix}n\\k\end{Bmatrix}\)
考虑先把相同的集合换成不同的集合,最后令每一项乘上\(\frac{1}{k!}\)
假设相同集合换成不同集合的\(EGF\)为\(F\),单个盒子的\(EGF\)为\(G\),那么\(F=G^k\)
由于每个盒子不能为空,所以
\[G=\sum\limits_{i=1}^{n}\frac{1}{i!}x^i
\]
\[=e^x-1
\]
所以
\[F=(e^x-1)^k
\]
所以
\[\begin{Bmatrix}i\\k\end{Bmatrix}=\frac{(e^x-1)^k}{k!}i!
\]
我们会惊喜地发现只要把第一类斯特林数·列的代码的初始多项式由\(\sum\frac{1}{i}\)换成\(\sum\frac{1}{i!}\)就\(AC\)了
反转公式
\[\sum_{k = m} ^ n (-1) ^ {n - k} \begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix} = [m = n]
\]
\[\sum_{k = m} ^ n (-1) ^ {n - k} \begin{Bmatrix} n \\ k \end{Bmatrix} \begin{bmatrix} k \\ m \end{bmatrix} = [m = n]
\]
第二个式子证明
将通常幂转成下降幂,再转成上升幂,再转成通常幂
\[n ^ m = \sum_{i = 0} ^ m \begin{Bmatrix} m \\ i\end{Bmatrix} n ^ {\underline{i}}
\]
\[= \sum_{i = 0} ^ m \begin{Bmatrix} m \\ i\end{Bmatrix} (-1) ^ i (-n) ^ {\overline{i}}
\]
\[= \sum_{i = 0} ^ m \begin{Bmatrix} m \\ i\end{Bmatrix} (-1) ^ i\sum_{j = 0} ^ i \begin{bmatrix} i \\ j\end{bmatrix} (-n) ^ j
\]
交换求和符号
\[\sum_{j = 0} ^ m (-n) ^ j \sum_{i = j} ^ m \begin{Bmatrix} m \\ i \end{Bmatrix} \begin{bmatrix} i \\ j \end{bmatrix} (-1) ^ i
\]
\[n ^ m = \sum_{j = 0} ^ m n ^ j \sum_{i = j} ^ m \begin{Bmatrix} m \\ i \end{Bmatrix} \begin{bmatrix} i \\ j \end{bmatrix} (-1) ^ {i - j}
\]
也就是说,只有当 \(j = m\) 时, \(\sum\limits_{i = j} ^ m \begin{Bmatrix} m \\ i \end{Bmatrix} \begin{bmatrix} i \\ j \end{bmatrix} (-1) ^ {i - j} = 1\)
也就是说,当 \(j != m\) 时,乘 \(+1, -1\) 的部分相互抵消,那 \(-1\) 的奇偶性也就随便了
斯特林反演
\[f(n) = \sum_{k = 0} ^ n \begin{Bmatrix} n \\ k \end{Bmatrix} g(k) \iff g(n) = \sum_{k = 0} ^ n (-1) ^ {n - k}\begin{bmatrix} n \\ k \end{bmatrix} f(k)
\]
证明
\[f(n) = \sum_{i = 0} ^ n [i = n] f(i)
\]
\[= \sum_{i = 0} ^ n \sum_{j = i} ^ n (-1) ^ {n - j} \begin{Bmatrix} n \\ j \end{Bmatrix} \begin{bmatrix} j \\ i \end{bmatrix} f(i)
\]
交换求和符号
\[=\sum_{j = 0} ^ n \begin{Bmatrix} n \\ j \end{Bmatrix} \sum_{i = 0} ^ j (-1) ^ {j - i} \begin{bmatrix} j \\ i\end{bmatrix} f(i)
\]
如果说
\[g(n) = \sum_{i = 0} ^ n (-1) ^ {n - i} \begin{bmatrix} n \\ i \end{bmatrix} f(i)
\]
成立
那么
\[f(n) = \sum_{k = 0} ^ n \begin{Bmatrix} n \\ k \end{Bmatrix} g(k)
\]
反过来也一样
证毕
例题
雅礼集训 2018 方阵
题意:给定 \(n * m\) 的矩阵,每个格子上填 \([1, c]\) 之间的数,求任意两行两列都不同的方案数,\(n, m \le 5000\)
题解:算是一种套路
首先行列都不同就非常难求,可以考虑先去掉一个限制,现在只求行不同的方案数
设 $g(m) = $ 列数数是 \(m\) 时,行不重复的方案数,显然
\[g(m) = (c ^ m) ^ {\underline{n}}
\]
设 \(f(m) =\) 列数是 \(m\) 时,行列都不重复的方案数,\(f(m) = ans\)
考虑 \(g(m)\) 的另一种求法,枚举 \(m\) 列中有多少不一样的
\[g(m) = \sum_{i = 0} ^ m \begin{Bmatrix} m \\ i \end{Bmatrix} f(i)
\]
发现这个式子符合斯特林反演,那
\[f(m) = \sum_{i = 0} ^ m (-1) ^ {m - i} \begin{bmatrix} m \\ i\end{bmatrix} g(i)
\]
没了
例题
题意:给定一颗树,从某个节点开始随机游走,每次操作花费一秒钟。在点 \(u\) 时,有 \(p_u\) 的概率留原地,否则等概率向周围的点移动,直到到达 1 号节点。求从每个点出发到停下,所花费时间的 \(k\) 次方期望。\(n * k \le 1e6\)
题解:斯特林反演 + 树上高斯消元(此题封神)
首先设 \(E(t_x)\) 表示从点 \(x\) 出发,到达 1 号节点的时间的期望,答案就是 \(E((t_x) ^ k)\)
首先,这个东西是 \(k\) 次幂期望,一般的递推方法 \(k = 3\) 就顶了,所以要给它降幂或者转换形式
根据一般幂转下降幂公式和期望线性性
\[E(t ^ k) = E(\sum_{i = 0} ^ k \begin{Bmatrix} k \\ i\end{Bmatrix} t ^ {\underline{i}})
\]
\[= \sum_{i = 0} ^ k \begin{Bmatrix} k \\ i \end{Bmatrix} E(t ^ {\underline{i}})
\]
\[= \sum_{i = 0} ^ k \begin{Bmatrix} k \\ i \end{Bmatrix} i! E(\binom t i)
\]
前面的第二类斯特林数,可以用 \(FFT\) 快速求出,问题在于如何求出 \(E(\binom t i)\)
根据期望求法,可以列出树上关系式,设 \(du_x\) 表示 \(x\) 的度数,\(fa_x\) 是 \(x\) 的父亲
\[E(\binom {t_x} i) = p_x E(\binom {t_x + 1} i) + \frac {1 - p_x} {du_x} E(\binom {t_{fa_x} + 1} i) + \sum_{v \in son_x} \frac {1 - p_x} {du_x} E(\binom {t_v + 1} i)
\]
但是 \(E(\binom {t_x + 1} i)\) 根本没法求,\(t_x\) 会越来越大,这时候就要请出我们在小学二年级学过的组合数公式
\[\binom n m = \binom {n - 1} m + \binom {n - 1} {m - 1}
\]
这样把 \(t_x\) 的 \(+1\) 消掉,就可以求了
\[E(\binom {t_x} i) = p_x E(\binom {t_x} i + \binom {t_x} {i - 1}) + \frac {1 - p_x} {du_x} E(\binom {t_{fa_x}} i + \binom {t_{fa_x}} {i - 1}) + \sum_{v \in son_x} \frac {1 - p_x} {du_x} E(\binom {t_v } i + \binom {t_v} {i - 1})
\]
因为我们是从小到大枚举的 \(i\),\(E(\binom {t_x} {i - 1})\) 就是已知值
为了简化式子,不妨设 \(dp_x = E(\binom {t_x} i), c_x = E(\binom {t_x} {i - 1}\),这样,原式子转化成了
\[dp_x = p_x (dp_x + c_x) + \frac {1 - p_x} {du_x} (dp_{fa_x} + c_{fa_x} + \sum_{v \in son_x} (dp_v + c_v))
\]
化简一下
\[du_x dp_x = du_x p_x(dp_x + c_x) + (1 - p_x) (dp_{fa_x} + c_{fa_x} + \sum_{v \in son_x} (dp_v + c_v))
\]
\[du_x dp_x = \frac {p_x du_x c_x} {1 - p_x} + dp_{fa_x} + c_{fa_x} + \sum_{v \in son_x} (dp_v + c_v)
\]
显然高斯消元是 \(O(n ^ 3)\) 的,根据树上高斯消元惯例,设 \(dp_x = a_x dp_{fa_x} + b_x\)
原式等于
\[du_xdp_x = \frac {p_x du_x c_x} {1 - p_x} + dp_{fa_x} + c_{fa_x} + \sum_{v \in son_x} (a_v dp_x + b_v + c_v)
\]
\[(du_x - \sum_{v \in son_x} a_v)dp_x = \frac {p_x du_x c_x} {1 - p_x} + dp_{fa_x} + c_{fa_x} + \sum_{v \in son_x} (b_v + c_v)
\]
\[dp_x = \frac 1 {du_x - \sum_{v \in son_x} a_v} dp_{fa_x} + \frac {\frac {p_x du_x c_x} {1 - p_x} + c_{fa_x} + \sum_{v \in son_x} (b_v + c_v)} {du_x - \sum_{v \in son_x} a_v}
\]
这样
\[a_x = \frac 1 {du_x - \sum_{v \in son_x} a_v}
\]
\[b_x = \frac {\frac {p_x du_x c_x} {1 - p_x} + c_{fa_x} + \sum_{v \in son_x} (b_v + c_v)} {du_x - \sum_{v \in son_x} a_v}
\]
只需要从下往上递推就能求出 \(a_x\) 和 \(b_x\) 了
然后这道题就做完了
时间复杂度 \(O(nk\ logn)\)
题目给出 \(a_i\) 要求每一种树的价值和,也就是
\[\sum_T \prod_{i = 1} ^ n d_i ^ m \sum_{i = 1} ^ n d_i ^ m \prod_{i = 1} ^ n a_i ^ {d_i}
\]
因为每个连通块内有 \(a_i\) 个点,随便连
发现 \(\sum\) 和 \(\prod\) 里面的东西一样,不妨一块枚举
\[\sum_T \sum_{i = 1} ^ n a_i^{d_i} d_i ^ {2m} \prod_{j \ne i} d_j^m a_j^{d_i}
\]
枚举树没有标准,我们在小学二年级的时候学过,\(Purfer\) 序列唯一确定一颗树,不如枚举 \(Purfer\) 序列,进一步,式子变成
\[\sum_{\sum k_i = n - 2} \frac {(n - 2)!} {\prod k_i!} \sum_{i = 1} ^ n a_i^{k_i + 1} (k_i + 1) ^ {2m} \prod_{j \ne i} (k_j + 1) ^ m a_j ^ {k_j + 1}
\]
就是枚举 \(Purfer\) 序列中每个数的出现次数 \(k_i\),因为答案只和度数有关系,\(d_i = k_i + 1\),这样就是把每个数填到序列里。
再交换一下求和符号
\[\sum_{i = 1} ^ n (n - 2)! \sum_{\sum k_i = n - 2} \frac 1 {\prod k_i!} a_i^{k_i + 1} (k_i + 1) ^ {2m} \prod_{j \ne i} (k_j + 1) ^ m a_j^{k_j + 1}
\]
然后发现如果把 \(k_i!\) 除进去,那这个东西是不是生成函数
设
\[A_i(x) = \sum_{k = 0} ^ \infty a_i ^ {k + 1} (k + 1)^{2m} \frac {x ^ k} {k!}
\]
\[B_i(x) = \sum_{k = 0} ^ \infty a_i ^ {k + 1} (k + 1)^{m} \frac {x ^ k} {k!}
\]
那答案不就是
\[\sum_{i = 1} ^ n (n - 2)! [n - 2]A_i(x)\prod_{j \ne i} B_j(x)
\]
现在问题就是如何求出 \(\sum [n - 2]A_i(x) \prod_{j \ne i} B_j(x)\)
接下来就是魔法操作 \(magic\)
求B_i(x):
设 \(T(x)\) 为 \(B_i(x)\) 的不定积分
\[T(x) = \sum_{k = 1} ^ \infty a_i^k k ^ m \frac{x^k} {k!}
\]
没见过这样的带 \(k^m\) 的生成函数,那就把它去掉,一般幂转下降幂
\[\begin{aligned}
T(x) &= \sum_{k = 1} ^ \infty a_i^k \frac{x ^ k} {k!}\sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} k^{\underline{j}} \\
&= \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} \sum_{k = j} ^ \infty a_i^k \frac{x ^ k}{( k - j)!} \\
&= \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} a_i^j x^j \sum_{k = j} ^ \infty \frac{(a_ix)^{k - j}} {(k - j)!} \\
&= \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} a_i^j x^j e^{a_ix}
\end{aligned}\]
\[\begin{aligned}
B_i(x) &= T'(x) \\
&= \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} a_i^j jx^{j - 1}e^{a_i x} + \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} a_i^{j + 1} x^j e^{a_i x} \\
&= e^{a_i x}(\sum_{j = 0} ^ {m - 1} \begin{Bmatrix} m \\ j + 1\end{Bmatrix} a_i^{j + 1} (j + 1)x^{j} + \sum_{j = 0} ^ m \begin{Bmatrix} m \\ j\end{Bmatrix} a_i^{j + 1} x^j) \\
&= e^{a_i x}(\sum_{j = 0} ^ {m} x^{j} a_i^{j + 1} ( \begin{Bmatrix} m \\ j + 1\end{Bmatrix} (j + 1) + \begin{Bmatrix} m \\ j \end{Bmatrix}) \\
&= e^{a_ix}\sum_{j = 0} ^ m \begin{Bmatrix}m + 1 \\ j + 1 \end{Bmatrix} a_i^{j + 1} x ^ j
\end{aligned}\]
求A_i(x):
设 \(T(x)\) 为 \(A_i(x)\) 的不定积分
\[T(x) = \sum_{k = 1} ^ \infty a_i^k k ^ {2m} \frac{x^k} {k!}
\]
没见过这样的带 \(k^m\) 的生成函数,那就把它去掉,一般幂转下降幂
\[\begin{aligned}
T(x) &= \sum_{k = 1} ^ \infty a_i^k \frac{x ^ k} {k!}\sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} k^{\underline{j}} \\
&= \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} \sum_{k = j} ^ \infty a_i^k \frac{x ^ k}{( k - j)!} \\
&= \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} a_i^j x^j \sum_{k = j} ^ \infty \frac{(a_ix)^{k - j}} {(k - j)!} \\
&= \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} a_i^j x^j e^{a_ix}
\end{aligned}\]
\[\begin{aligned}
A_i(x) &= T'(x) \\
&= \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} a_i^j jx^{j - 1}e^{a_i x} + \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} a_i^{j + 1} x^j e^{a_i x} \\
&= e^{a_i x}(\sum_{j = 0} ^ {2m - 1} \begin{Bmatrix} 2m \\ j + 1\end{Bmatrix} a_i^{j + 1} (j + 1)x^{j} + \sum_{j = 0} ^ {2m} \begin{Bmatrix} 2m \\ j\end{Bmatrix} a_i^{j + 1} x^j) \\
&= e^{a_i x}(\sum_{j = 0} ^ {2m} x^{j} a_i^{j + 1} ( \begin{Bmatrix} 2m \\ j + 1\end{Bmatrix} (j + 1) + \begin{Bmatrix} 2m \\ j \end{Bmatrix}) \\
&= e^{a_ix}\sum_{j = 0} ^ {2m} \begin{Bmatrix}2m + 1 \\ j + 1 \end{Bmatrix} a_i^{j + 1} x ^ j
\end{aligned}\]
设
\[F_i(m) = \sum_{j = 0} ^ m \begin{Bmatrix}m + 1 \\ j + 1 \end{Bmatrix} a_i^{j + 1} x ^ j
\]
那么
\[(n - 2)! \sum_{i = 1} ^ n [n - 2]A_i(x) \prod_{j \ne i} B_j(x) = (n - 2)! \sum_{i = 1} ^ n [n - 2]e^{sum_a x} F_i(2m) \prod_{j \ne i} F_j(m)
\]
看到这个形式是不是很熟悉,对了!它就是分治 \(FFT\)
时间复杂度 \(O(nmlog^2(n))\)
例题
求 \(n\) 个点带标无向联通块数 \(k\) 次幂之和,\(n \le 1e5, k \le 15, 1e5\) 组数据
\[\begin{aligned}
ans &= \sum_{T \in tree} T^k \\
&= \sum_T \sum_{i = 0} ^ k \begin{Bmatrix} k \\ i \end{Bmatrix} \binom T i i! \\
&= \sum_{i = 0} ^ k \begin{Bmatrix} k \\ i \end{Bmatrix} i! \sum_T \binom T i
\end{aligned}\]
虽然 \(T^k\) 求不了但是 \(\sum_T \binom T i\) 是个套路
设 \(dp_i(j)\) 表示 \(j\) 个点,\(i\) 个连通块的方案数,枚举选出的 \(i\) 个连通块的大小
\[\begin{aligned}
\sum_T \binom T i &= \sum_{j = 1} ^ n \binom {n} {j} dp_i(j) 2^{\binom {n - j} 2} \\
ans &= \sum_{i = 0} ^ k \begin{Bmatrix} k \\ i \end{Bmatrix} i! n!\sum_{j = 1} ^ n \frac {dp_i(j)} {j!} \frac {2 ^ {\binom {n - j} 2}} {(n - j)!}
\end{aligned}\]
看组合数不爽,把它拆了,发现这玩意是个卷积,如果我知道 \(dp_i(j)\) 那卷一卷就知道对于每个 \(n\) 来说的答案了
现在的问题就是如何求出 \(dp_i(j)\)
考虑编号为 \(1\) 的点所在的块大小
\[dp_i(n) = \sum_{j = 1} ^ n \binom {n - 1} {j - 1} dp_1(j) dp_{i - 1}(n - j)
\]
看组合数不爽,把组合数拆开
\[\frac {dp_i(n)} {(n - 1)!} = \sum_{j = 1} ^ n \frac {dp_1(j)} {(j - 1)!} \frac{dp_{i - 1}(n - j)} {(n - j)!}
\]
哦,原来它是个卷积,那只要求出 \(dp_1(i)\) 问题就都解决了,然后求 \(dp_1(i)\) 还是个套路
考虑用全集减去不合法方案数,还是枚举 \(1\) 号节点所在块的大小
\[\begin{aligned}
dp_1(n) &= 2^{\binom n 2} - \sum_{i = 1} ^ {n - 1} \binom {n - 1} {i - 1} dp_1(i) 2^{\binom {n - i} 2} \\
2^{\binom n 2} &= (n - 1)! \sum_{i = 1} ^ n \frac {dp_1(i)} {(i - 1)!} \frac{2^{\binom {n - i} 2}} {(n - i)!} \\
\frac{2^{\binom n 2}} {(n - 1)!} &= \sum_{i = 1} ^ n \frac {dp_1(i)} {(i - 1)!} \frac{2^{\binom {n - i} 2}} {(n - i)!}
\end{aligned}\]
设
\[\begin{aligned}
A &= \sum_{i = 1} ^ n \frac {dp_1(i)} {(i - 1)!} \\
B &= \sum_{i = 1} ^ n \frac{2 ^ {\binom i 2}} {i!} \\
C &= \sum_{i = 1} ^ n \frac {2 ^ {\binom i 2}} {(i - 1)!}
\end{aligned}\]
那么
\[C = A * B
\]
\[A = C * B^{-1}
\]
多项式求逆就行了
\(or\)
看到上面的形式就知道是分治 \(FFT\),直接搞就行了