注:此博客写于 2017.9
prufer序是无根树的编码表示,对于一棵\(n\)个节点带编号的无根树,对应唯一一串长度为\(n-2\)的prufer编码。
无根树转化为prufer序列
找到编号最小的叶子并删除,序列中添加与之相连的节点编号,重复执行直到只剩下\(2\)个节点。
根据以上过程,显然有推论 一个节点的度数=其在prefer序列出现的次数+1。
prufer序列转化为无根树
首先prufer序列中的出现次数+1可以得到每个节点的度。
先执行\(n-2\)步,选取最小标号度为1的点\(u\)与Purfer序列的第\(i\)个数\(v\)表示的顶点相连,并将\(u\)和\(v\)的度减\(1\)。最后再把剩下的两个度为\(1\)的点连边。
由此发现,一棵无根树和与一个prufer序列一一对应。
一些推论
- 一个无向完全图的生成树个数为\(n^{n-2}\)。
- 设节点\(i\)的度数限制为\(di\),求满足条件树的个数。对应到prufer序列,相当于\(i\)在序列中出现了\(di-1\)次,不同的排列数。即为\(n!\)除以每个\((di-1)!\)。
- 对于一些没有限制度数,稍微修改一下即可。