Prüfer 序列
引入
先从 \(n\) 个点的有标号无根数个数出发,是 \(n^{n-2}\) 种。这是有关 prufer 序列的。
prufer 序列是这样建立:每次寻找编号最小的叶子节点并删除,在序列中加入这个点与之相连的那个点编号。
重复以上过程直到树只有两个点。
两个性质:剩下这两个点其中一个一定是 \(n\)。
每个点出现次数是其在序列中出现次数 \(-1\).
可以使用一个指针维护当前最小的叶子节点,来 \(O(n)\) 实现这个过程:
如何通过 prufer 序列还原树呢?
首先我们可以知道每个点的度数,然后每次找叶子节点即可。
发现一个 prufer 序列与一棵有标号的无根树对应。
那么每个位置有 \(n\) 种取值,有 \(n-2\) 位,那么就有 \(n^{n-2}\) 种树。
应用
给定每个点的度数求树的数量。
如果我们知道 \(x\) 度数是 \(d_x\),那么这就会在 prufer 序列中出现 \(d_x-1\) 次。
那么变成可重全排列,是 \(\dfrac{(n-2)!}{\prod (d_x-1)!}\).