内容主要总结自 OI Wiki,仅作个人记录。
简介
Prüfer 序列是一种在「包含 n(n≥2)n(n\ge 2)n(n≥2) 个有编号结点的无根树」与「整数序列 a(ai∈[1,n],∣a∣=n−2)a(a_i\in[1,n],|a|=n-2)a(ai∈[1,n],∣a∣=n−2)」之间建立双射的方法。
原理
由树到序列的映射
每次选择树中编号最小的叶结点删除,并将与其连接的结点编号加入序列尾。重复 n−2n-2n−2 次,剩下两个结点。
O(n)O(n)O(n) 实现:维护编号值域上的指针 ppp,初始指向最小叶结点编号。假设一次删除后新增了叶结点 xxx,若 x<px<px<p 则继续删除 xxx,否则让 ppp 自增到第一个未删除的叶结点并删除。
由序列到树的映射
维护每个结点的度。正向遍历序列,每次选择度为 1 的最小编号结点与序列元素对应结点连接,然后减小这两个结点的度。重复 n−2n-2n−2 次,剩下两个度为 1 的结点。
O(n)O(n)O(n) 实现:同理,维护指针 ppp。假设一次连接后新增了度为 1 的结点 xxx,若 x<px<px<p 则继续使用 xxx 连接,否则让 ppp 自增到第一个度为 1 的结点并使用其连接。
应用
证明凯莱公式
凯莱公式:完全图 KnK_nKn 有 nn−2n^{n-2}nn−2 棵生成树。
完全图 KnK_nKn 的生成树集即「包含 n(n≥2)n(n\ge 2)n(n≥2) 个有编号结点的无根树」集,而该集合与「整数序列 a(ai∈[1,n],∣a∣=n−2)a(a_i\in[1,n],|a|=n-2)a(ai∈[1,n],∣a∣=n−2)」集有双射关系,因此前者大小等于后者大小,即 nn−2n^{n-2}nn−2。
结论拓展:包含 nnn 个有编号结点的有根树有 nn−1n^{n-1}nn−1 种。
本文介绍了Prüfer序列,一种将有编号节点的无根树映射为整数序列的双射方法,以及如何通过该序列重建树。此外,利用这个双射,证明了完全图的生成树数量等于满足条件的整数序列的数量,从而展示了Prüfer序列在图论中的重要性。


540

被折叠的 条评论
为什么被折叠?



