Prüfer序列 简要总结

内容主要总结自 OI Wiki,仅作个人记录。


简介

Prüfer 序列是一种在「包含 n ( n ≥ 2 ) n(n\ge 2) n(n2) 个有编号结点的无根树」与「整数序列 a ( a i ∈ [ 1 , n ] , ∣ a ∣ = n − 2 ) a(a_i\in[1,n],|a|=n-2) a(ai[1,n],a=n2)」之间建立双射的方法。

原理

由树到序列的映射

每次选择树中编号最小的叶结点删除,并将与其连接的结点编号加入序列尾。重复 n − 2 n-2 n2 次,剩下两个结点。

O ( n ) O(n) O(n) 实现:维护编号值域上的指针 p p p,初始指向最小叶结点编号。假设一次删除后新增了叶结点 x x x,若 x < p x<p x<p 则继续删除 x x x,否则让 p p p 自增到第一个未删除的叶结点并删除。

由序列到树的映射

维护每个结点的度。正向遍历序列,每次选择度为 1 的最小编号结点与序列元素对应结点连接,然后减小这两个结点的度。重复 n − 2 n-2 n2 次,剩下两个度为 1 的结点。

O ( n ) O(n) O(n) 实现:同理,维护指针 p p p。假设一次连接后新增了度为 1 的结点 x x x,若 x < p x<p x<p 则继续使用 x x x 连接,否则让 p p p 自增到第一个度为 1 的结点并使用其连接。

应用

证明凯莱公式

凯莱公式:完全图 K n K_n Kn n n − 2 n^{n-2} nn2 棵生成树。

完全图 K n K_n Kn 的生成树集即「包含 n ( n ≥ 2 ) n(n\ge 2) n(n2) 个有编号结点的无根树」集,而该集合与「整数序列 a ( a i ∈ [ 1 , n ] , ∣ a ∣ = n − 2 ) a(a_i\in[1,n],|a|=n-2) a(ai[1,n],a=n2)」集有双射关系,因此前者大小等于后者大小,即 n n − 2 n^{n-2} nn2

结论拓展:包含 n n n 个有编号结点的有根树有 n n − 1 n^{n-1} nn1 种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值