【做题记录】CF1097G Vladislav and a Great Legend
-
\(\text{CF1097G Vladislav and a Great Legend }\)
- 算法:树形 \(\text{dp}\),斯特林数,虚树
题目:
给你一棵有 \(n\) 个节点的树 \(T\),\(n\) 个节点编号为 \(1\) 到 \(n\)。
对于 \(T\) 中每个非空的顶点的集合 \(X\),令 \(f(X)\) 为包含 \(X\) 中每个节点的最小连通子树的最小边数,即虚树的大小。
再给你一个整数 \(k\)。你需要计算对于每一个顶点的集合 \(X\),\((f(X))^k\) 之和,即:
\[\sum_{X\subseteq\{1,2,\dots,n\},X\neq\varnothing}(f(X))^k
\]
答案对 \(10^9+7\) 取模。
\(n\le 2\times 10^5,k\le 200\)
题解:
首先对于 \(f(x)^k\) 用第二类斯特林数计算,显然有
\[x^k=\sum_{i=0}^k i!\dbinom{x}{i}\begin{Bmatrix}k\\i\end{Bmatrix}
\]
\(\begin{aligned}ans & = \sum_x\sum_{i=0}^{k}i!\dbinom{f(x)}{i}\begin{Bmatrix}k\\i\end{Bmatrix} \\ & = \sum_{i=0}^{k}i!\begin{Bmatrix}k\\i\end{Bmatrix}\sum_x\dbinom{f(x)}{i}\end{aligned}\)
\[\therefore ans=\sum_x\sum_{i=0}^{k}i!\dbinom{f(x)}{i}\begin{Bmatrix}k\\i\end{Bmatrix}
\]
所以我们可以枚举点 \(i\),然后求所有的非空点集对应的生成树标记了 \(i\) 条边的方案数之和。
令 \(f_{i,j}\) 表示