树的计数

Prufer序列的转化方法见这篇博客(这篇文章里这道模板题的高精处理方法也看看,注意特判条件,想想为啥充要)

这里主要是对这篇博客的一些说明。

首先:为什么Prufer序列与无根树一一对应?

我们要先知道两个引理:出现在Prufer序列中的点一定是原无根树的非叶子节点(这里的叶子节点定义为最开始度数为\(1\)的点),没有出现在Prufer序列中的一定是原无根树的叶子节点

第一个引理比较简单,因为非叶子节点根本没有儿子节点让他被添加到Prufer序列中

第二个引理,我们用反证。设某个原无根树的非叶子节点没有被添加到Prufer序列中。

如果这个节点已经被删除了(不是最后剩下的那两个节点中的其中一个),那么在这个节点被删除的时候,它一定只剩了一条边。由于它原来不是叶子节点,所以他最开始的边是多于一条边的,那么这些边任何一个被删除的时候都会把这个点添加到Prufer序列中,矛盾

如果这个节点是最后剩下的两个中的其中一个,那么这个点最后只剩下了一条边,同理,他在删除任何一条边的时候都会被添加到Prufer序列中,矛盾

综上,两个引理得证

对于一个无根树转化成prufer序列的过程中,由于我们每次选择的是最小的节点,所以最终会得到唯一的prufer序列

对于prufer序列还原的时候,文章中说的“点集”指的是还没有被还原的点。注意每次从点集时删除点的时候,相当于在树上还原了一个节点,然后我们按照数学归纳法考虑就好了。在还原的过程中,由于每个点只会被删除一次,所以如果某个点在经过这次还原后已经不再Prufer序列里面了,一定要在非Prufer序列集合里面增加这个点(当然也可以一开始就把所有点加入到一个点集里面,就像文章说的那样)。因为对此时剩下的图来说,这个点已经是叶子节点了

那么我随便写一个Prufer序列一定都是合法的吗?

答案是肯定的。因为Prufer序列的长度是\(n-2\),假设我们已经还原了\(k\)个节点,那么按照博客里面的方法,点集中还有\(n-k\)个节点没有被选择,然而此时Prufer序列里面只有\(n-2-k\)个节点,即没有被选择的节点至少还有两个可以选择,所以在任意时刻都不会找不到供选择的节点

再提一嘴文章中有一个prufer的性质,就是组成的无根树的数量是\(n^{n-2}\)。如果是有根树怎么办?对每一种无根树,我们指定一个根就好了,为\(n^{n-1}\)

posted @ 2023-10-01 16:26  最爱丁珰  阅读(2)  评论(0编辑  收藏  举报