「四校联考」大水题 「简单prufer序列」
prufer序列
prufer序列是一种无根树的序列表示方法,一个节点个数为 $n$ 的无根树对应着唯一一种长度为 $n - 2$ 的prufer序列
无根树化prufer序列
每次取编号最小的叶子节点,将其指向的“父亲”(就是它唯一指向的)节点加入prufer序列中,最终剩余两个连接的节点结束
prufer序列化无根树
对于prufer序列 $A= \{a_1, a_2, a_3, …\}$,每次取最前面的元素 $a_s$,在总点集中找到最小的没有在 $A$ 中的节点 $t$,将 $a_s, t$ 连边并删去 $a_s$,可以使用 $set$ 等维护
相关定理
- $n$ 个点的有标号完全图无根树计数:$n^{n - 2}$
- $n$ 个点,每个点的度数为 $\{d_1, d_2, d_3, …\}$ 的有标号无根树计数:$\frac{(n - 2)!}{d_1!d_2!d_3!…}$(实际上就是一个多重集的排列数)
- $n$ 个点的prufer序列中第 $i$ 个点恰好出现 $d_i - 1$ 次
- $n$ 个点度数为 $\{d_1, d_2, …, d_k\}$,剩余 $k + 1 \thicksim n$ 未知度数的节点的有标号无根树计数:设剩余的位置 $d_l = (n - 2) - \sum\limits_{i = 1}^k (d_i- 1) $,先将它们看作一个整体再局部求解得到 $ans = \frac{(n - 2)!}{d_1!d_2!…d_k!d_l!}(n - k)^{d_l}$
- $n$ 个点的有标号有根树计数:$n^{n - 1}$
- $n$ 个点的无标号有根树计数:待续
- $n$ 个点的无标号无根树计数:待续
本题题解
题目描述
有 $n$ 个有标号点,第 $i$ 个点的度数上限为 $A_i$
现在对于每个 $s (1 \le s \le n)$,问从这 $n$ 个点中选出一些点组成大小为 $s$ 的有标号无根树的方案数
数据范围
对于 $100\%$ 的数据,$n \le 100$
考虑直接将无根树转化为prufer序列,由唯一性在序列上直接 $dp$
令 $f_{i, j, k}$ 表示前 $i$ 个点选 $j$ 个组成长度为 $k$ 的prufer序列的方案数
显然
$$
\begin{aligned}
f_{i + 1, j, k} &+= f_{i, j, k} \\
f_{i + 1, j + 1, k + l(l \in [0, A_{i + 1} - 1])} &+= f_{i, j, k} \times \dbinom{k + l}{l}
\end{aligned}
$$
代码
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.