码迷,mamicode.com
首页 > 其他好文 > 详细

Prufer 序列

时间:2017-10-27 20:41:43      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:strong   依次   节点   应用   出现   序列   扫描   表示   不能   

  给 $n$ 个带标号点的无根树,可以构造 Prufer 序列:每次找标号最小的叶子,将与其相邻的结点加入 Prufer 序列中,然后将这个叶子节点删去,直到这棵树只有 $2$ 个节点。

  尝试对一个长度为 $n-2$ 、每一项在 $1$ 到 $n$ 之间的 Prufer 序列 $Q$ ,求出它对应的无根树:从小到大依次扫描 Prufer 序列的第 $x$ 项,那么在 $x$ 之后没有出现、且没有被删除的点一定是叶子节点,于是找到最小的满足条件的点,将这个点与 $Q_x$ 连边;最后还剩下了两个没有被删除的节点,将它们连边。

  长度为 $n-2$ 、每一项在 $1$ 到 $n$ 之间的 Prufer 序列与 $n$ 个点的无根树一一对应,只需要证明对于任意的 $x \in [0, n-2)$ ,扫描到 Prufer 序列的第 $x+1$ 项时,能够找到一个在 $x$ 之后没有出现、且没有被删除的点。这时候一共有 $n - x$ 个点可以被选择,且由 Prufer 序列知有至多 $n - 2 - x$ 个点不能够被选择,所以一定至少有 $2$ 个叶子节点可以被选择,所以得证。

  综上,长度为 $n-2$ 、每一项在 $1$ 到 $n$ 之间的 Prufer 序列与 $n$ 个点的无根树一一对应。

 

  Prufer 序列的一个经典应用是证明 Caley 公式:$n$ 个点的带标号无根树的个数为 $n ^ {n - 2}$ 。

  如果要对有根树个数进行计数,那么只需要枚举根,而根一共有 $n$ 个,所以 $n$ 个点的带标号有根树个数为 $n ^ {n - 1}$ 。

 

  限制每个点的度数恰好为 $d_1, d_2, ..., d_n$ ,如何计算这 $n$ 个点构建的满足度数限制的无根树个数?

  在 Prufer 序列中,第 $i$ 个点出现的次数为 $d_i - 1$ ,所以树的个数为 $\begin{aligned} \binom{n - 2}{d_1 - 1, d_2 - 1, ..., d_n - 1} \end{aligned}$ 。

 

  限制每个点的度数不超过 $d_1, d_2, ..., d_n$ ,如何计算这 $n$ 个点构建的满足度数限制的无根树个数?

  考虑一个流程,构建所有合法的 Prufer 序列:从 $1$ 到 $n$ 依次进行,每次将不超过 $d_i - 1$ 个 $i$ 插入 Prufer 序列中,且满足总长度不超过 $n-2$ 。

  用 DP 套上这个流程,设 $f[i][j]$ 表示考虑了前 $i$ 个数,序列的总长度为 $j$ 的方案数。边界为 $f[0][0] = 1$ ,答案为 $f[n][n - 2]$ 。转移:$\begin{aligned} f[i][j] = \sum_{k \le d_i - 1} \binom{j}{k} f[i-1][j - k] \end{aligned}$ 。

 

  将 Prufer 序列推广到有根树。

  给一棵 $n$ 个带标号节点的有根树,可以构造出 有根树 Prufer 序列:每次找标号最小的叶子,将与其相邻的结点加入 Prufer 序列中,然后将这个叶子节点删去。

  给一个长度为 $n-1$ 、前 $n-2$ 项在 $1$ 到 $n$ 、最后一项为根的有根树 Prufer 序列,求出它对应的有根树:从小到大依次扫描 Prufer 序列的第 $x$ 项,那么除根以外、在 $x$ 之后没有出现、且没有被删除的点一定是叶子节点,于是找到最小的满足条件的点,然后将 $Q_x$ 向这个点连有向边。

  长度为 $n-1$ 、前 $n-2$ 项在 $1$ 到 $n$ 、最后一项为根的有根树 Prufer 序列与 $n$ 个点的有根树一一对应,只需要证明对于任意的 $x \in [0, n-1)$ ,扫描到 Prufer 序列的第 $x+1$ 项时,能够找到一个除根以外、在 $x$ 之后没有出现、且没有被删除的点。这时候一共有 $n - 1 - x$ 个点可以选择,且由 Prufer 序列知有至多 $n - 1 - x$ 个点不能够被选择,注意到 Prufer 序列中包含了根,所以至多有 $n - 2 - x$ 个除根以外的点不能够被选择,所以至少存在 $1$ 个点可以被选择,所以得证。

  综上,长度为 $n-1$ 、前 $n-2$ 项在 $1$ 到 $n$ 、最后一项为根的有根树 Prufer 序列与 $n$ 个点的有根树一一对应。

  如果要求对有根树计数,也可以从有根树 Prufer 序列的角度进行理解。

 

  将 Prufer 序列推广到有根树构成的森林(简称有根森林)。

  给 $K$ 棵共有 $n$ 个带标号节点的有根树,类似地,可以构造出长度为 $n-K$ 、前 $n-K-1$ 项在 $1$ 到 $n$ 、最后一项为某个根节点的有根森林 Prufer 序列

  给长度为 $n-K$ 、前 $n-K-1$ 项在 $1$ 到 $n$ 、最后一项为某个根节点的有根森林 Prufer 序列,类似地,求出它的对应有根森林。

  长度为$n-K$ 、前 $n-K-1$ 项在 $1$ 到 $n$ 、最后一项为某个根节点的有根森林 Prufer 序列与 $n$ 个点的有根树一一对应,只需要证明对于任意的 $x \in [0, n-K)$ ,扫描到有根森林 Prufer 序列的第 $x+1$ 项时,能够找到一个除根以外、在 $x$ 之后没有出现、且没有被删除的点。这时候一共有 $n-K-x$ 个点可以选择,且由 Prufer 序列知有至多 $n - K - x$ 个点不能够选择,注意到 Prufer 序列中包含了根,所以至多有 $n - K - 1 - x$  个除根以外的点不能够被选择,所以至少存在 $1$ 个点可以被选择,所以得证。

  综上,长度为$n-K$ 、前 $n-K-1$ 项在 $1$ 到 $n$ 、最后一项为某个根节点的有根森林 Prufer 序列与 $n$ 个点的有根树一一对应。

  如果要计算把 $n$ 个带标号点划分到 $K$ 个有根森林的方案数,就先钦定 $K$ 个根,然后枚举 Prufer 序列,所以方案数为 $\binom{n}{K} n ^ {n - K - 1} K$ 。

 

  $n$ 个带标号点的基环树计数。

  枚举环上的点数 $K$ ,环排列乘上划分到 $K$ 个有根森林进行计数。

  $\begin{aligned} ans_n & = \sum_{K = 3} ^ n \binom{n}{K} n ^ {n - K - 1} K \times  (k-1)! \\ & = \frac{n!}{2} \sum_{K = 3} ^ n \frac{n ^ {n - K - 1}}{(n - K)!} \end{aligned}$

  可以线性求出 $ans[]$ 的某一项。

Prufer 序列

标签:strong   依次   节点   应用   出现   序列   扫描   表示   不能   

原文地址:http://www.cnblogs.com/Sdchr/p/7707109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!