Valuable Forests
Description
对于一棵带标号无根树 \(T\),我们定义其价值为 \(\sum_{u\in Son(T)} (d(u))^2\),其中 \(d(u)\) 为点 \(u\) 的度数。一个森林的价值为其所含所有无根树的价值和。求 \(n\) 个点的所有森林的价值和,答案对给定质数取模。
Solution
令 \(f_n\) 表示所有 \(n\) 个点的带标号无根树的价值和。思考一番会发现,我们并不能直接继承之前的某个 \(f_i\)。因为新加入一个点,会影响之前的点的度数,而状态里面是不包含这一信息的。只能换一个角度计数。注意到所有点实际上是本质相同的,所以我们只需考虑单独的一个点的贡献,最后乘上 \(n\) 即可。对于一个点,我们考虑计数当它的度数为 \(k\) 时的贡献。容易发现,这就是 \(k^2\) 乘上该点的度数为 \(k\) 的树的个数。通过 \(prufer\) 计数,我们只需要在序列中令 \(k-1\) 个位置为该点,剩下的位置填其他点。方案有 \(\binom{n-2}{k-1}(n-1)^{n-2-(k-1)}\)。于是得到
\[f_n=n\sum_{i=1}^{n-1}i^2\binom{n-2}{i-1}(n-1)^{n-1-i}
\]
令 \(g_n\) 表示所有 \(n\) 个点的森林的价值和。只需将若干树合并。需要注意的是,树之间是无顺序的。直接枚举最后一棵树的节点数,然后 \(\binom{n}{k}\) 选出节点,会导致算重。一个技巧是像斯特林数一样计数,考虑枚举哪些点和点 \(n\) 放在一块。于是得到
\[g_n=\sum_{i=0}^{n-1} \binom{n-1}{i}(g_{n-i-1}F_{i+1}+G_{n-i-1}f_{i+1})
\]
其中 \(F_n\) 和 \(G_n\) 分别表示 \(n\) 个点的带标号无根树/森林的个数,有
\[\begin{align*}
F_{n}&=n^{n-2}\\
G_n&=\sum_{i=0}^{n-1} \binom{n-1}{i}G_{n-1-i}F_{i+1}
\end{align*}
\]