prufer序列

本文介绍了Prufer序列的概念,详细阐述了其生成方式和性质,并通过举例展示了如何利用Prufer序列解决树的计数问题。在实际应用中,如HNOI2004和HNOI2008的竞赛题目,Prufer序列的性质对于解决高精度计算问题具有重要作用。此外,文章还强调了Prufer序列在度数计数上的应用。
摘要由CSDN通过智能技术生成

【算法简介】

prufer序列就是,将一个带标号有根树和n-2个点值域在[1,n]的一个双射   这不重要

建立方式:

每次选择一个编号最小的点删除,然后找到这棵树的叶节点标号最小的一个,在序列中记录下这个叶节点连接的那个点(父亲),重复n-2次即可

 

构建一个指针p,初始把它直到最小的叶子节点

然后循环进行一下操作:

1.删除当前p指向的节点

2.如果产生新的节点,设这个节点编号为x,如果x>p,不做其他操作;否则删除x,检查是否出现新的叶子节点,重复步骤2

3.增加指针p直到指向一个未被删除的叶节点

性质:

1.剩下的2个节点中有一个为n

2.每个节点出现的次数是其度数-1

利用prufer序列构建重构树:

仍然有线性的构造方法,与当前枚举到的 Prufer 序列的点连接,然后同时减掉两个点的度。到最后我们剩下两个度数为 的点,其中一个是结点 。就把它们建立连接。

Prufer 序列的方法。在删度数的时侯会产生新的叶结点,于是判断这个叶结点与指针p的大小关系,如果更小就优先考虑它

其实我们更多的会用到prufer序列的度数性质,来进行计数

【例题】P2290 [HNOI2004]树的计数

提交记录

【习题1】P2624 [HNOI2008]明明的烦恼

这是个需要高精的题,那我们就必然用python了

提交记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值