斯特林反演

斯特林数

第一类

\(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)\)

LOJ #2320. 「清华集训 2017」生成树计数

题目给出 \(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\),直接搞就行了

posted @ 2020-06-06 11:03  __int256  阅读(205)  评论(0编辑  收藏  举报