Prüfer 序列和 Caley 定理
博客网址
OI Wiki讲的还挺好的。
标号无根树
其实就是把一棵无根树标一下号,让每一个节点是唯一的。
双射
一个
Prufer 序列
前提:
-
我们在无根树中视度数为
1 的点为叶子结点。 -
我们不考虑只含有
1 个结点的树。 -
无根树叶子结点的父节点定义为跟它相连的点(显然是唯一的)。
合法条件
只出现
构造
Prufer 序列构造依赖于一棵树。构建方法如下:
-
找到一棵树的最小叶子结点,删除它,并往序列尾端加入它的父节点编号。
-
如果它的父节点变成叶子结点,将它丢到叶子结点的序列中。
-
重复直到只剩两个点。
显然可以用堆模拟,也有线性构造算法(详情见 OI-WIKI)。
性质
-
序列中有
n-2 个数考虑每次加入一个点必然意味着原图边数减一,而原图有
n-1 条边且最后两个点之间的边不删,所以一共删了n-2 条边,即加入了n-2 个点。 -
剩下的两个节点中一定有一个编号是
n 由于
n 的编号最大,所以它如果是叶子结点序列中的,那它一定是最后一个。 -
每个结点在序列中出现的次数是其度数减
1 (没有出现的就是初始叶结点)一个结点如果它的度数为
z 大,那么它就和z 个点相连,按照建树过程我们会逐渐将它的度数减小到1 ,让它变成叶子结点从而直接删去。这个过程除了最后一条边每次度数减1 我们都会将该点加入序列一次,也就是z-1 次。 -
一个合法的 Prufer 序列和一颗树之间有双射关系 这是 Prufer 序列应用最多的性质。首先由于构造 Prufer 序列的过程是确定唯一的,所以一颗树唯一对应到一个 Prufer 序列。然后请先阅读下方重建树的内容,从中我们不难发现一个 Prufer 序列也唯一还原出生成它的那棵树,即一个 Prufer 序列也唯一对应到一颗树,所以它们满足双射关系。
重建树
由于性质
首先先把原图中的叶子结点加进
那么这是怎么保证还原出一颗一模一样的树呢?我们发现 Prufer 序列当前对首一定是叶子结点中编号最小的那个的根,于是我们只要还原出 Prufer 序列当前点对应的叶子集合,然后每次把队首和叶子集合中编号最小的叶子结点连边即可。
那么如何还原每一阶段的叶子集合?首先对于 Prufer 第一个点,它对应的叶子结点集合就是原树的叶子结点,由性质
同样有线性方法重建树。
Cayley 定理
陈述
一个完全图如果大小为
证明
下面用 Prufer 序列证明。
首先我们再一次看回重建树过程,发现一个合法的 Prufer 序列(只出现
例题
可以参考一下 OI-Wiki,这里给一道巧妙运用了 Cayley 定理的题: Luogu P7718 「EZEC-10」Equalization