prufer序列

prufer序列

prufer 序列是无根树的序列化表示,有标号的无根树与长度为 n2prufer 序列构成双射。

构造方法

将度数为 1 的节点定义为叶子节点。

对于一棵有标号的无根树,构造一个 prufer 序列:

  1. 找到编号最小的一个叶子节点,记为 x ,将与 x 相连的节点记为 y

  2. 删去 x ,将 y 节点加入 prufer 序列。

  3. 重复 1,2 操作,直到树中只剩下两个节点为止。

对于一个 prufer 序列,构造一棵无根树:

设未在 prufer 序列中出现的点构成的点集为 S

  1. 取出 prufer 序列中第一个元素 x,找到 S 中编号最小的点记为 y

  2. xy 连边,在 prufer 序列中删除 x

  3. 重复 1,2 操作直到 prufer 序列为空。

prufer 序列的一些性质

  • 对于树中的一个节点 x ,它在 prufer 序列中出现的次数 = 它的度数 1

    证明从略:

    每删去一个与 x 相连的节点时,x 便会在 prufer 序列中出现一次,

    而删去 x 的时候,它必定也只会与一个节点相连,于是 xprufer 序列中出现的次数就是度数 1

具体实现可以采用 set 维护最小值,时间复杂度 O(nlogn)

也可以用指针维护:时间复杂度 O(n)

不过 prufer 序列的主要作用不在于如何构造或还原一棵树,它的主要应用在于对无标号图的组合计数。

题目:[HNOI2004]树的计数 - 洛谷

题解:树的计数

posted @   mklzc  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示