【学习笔记】Prufer 序列

树的 Prufer 序列

Prufer 序列可以将一棵 n 个点的无根树用一个长度为 n2 的序列表示,且序列中的每个数都是 [1,n] 之间的整数,它的作用在于可以将树与数列建立一个一一对应的双射关系,帮助解决一些有关树的组合计数问题。

对于一棵 n 个结点的树,其 Prufer 序列的构建过程如下:

  • 选择当前编号最小的叶结点,将其删除,并把它的父亲加入到序列末尾。
  • 重复以上过程 n2 轮,直到最后剩下两个结点时停止。

用小根堆模拟上述过程即可做到 O(nlogn) 建立 Prufer 序列,当然也存在线性构建方法,但并没有什么用。

Prufer 序列的应用

因为 Prufer 序列与树之间是双射关系,因此可以用来对树计数。

无向完全图生成树个数(Cayley 公式)#

设该完全图有 n 个结点,则其生成树个数为 nn2

证明显然,因为每棵生成树都对应一个 Prufer 序列,等价于问长度为 n2 的 Prufer 序列有几种,而 Prufer 序列每个位置都能填 [1,n] 之间的任意整数。

同时这个问题还有个等价描述:n 个点的无根树个数。事实上改成有根树答案只是变成了 n×nn2=nn1,因为每棵无根树的 n 个点都能成为根。

给定度数的树个数#

不妨假设边都是无向的,如果给定了 n 个点的度数 deg1,deg2,deg3,,degn,那么满足要求的树的个数为:

(n2)!i=1n(degi1)!

证明同样是简单的,观察 Prufer 序列的构建过程可以得到一个性质:每个点在 Prufer 序列中一定恰好出现了 degi1 次,因此给定度数时 Prufer 序列的数字组成已经固定了,共有 (n2)! 种排列方式,但是每个点都有 (degi1)! 种重复排列的方式,所以再除去即可。

广义 Cayley 公式#

发现这个许多文章并没有记录,但是它是真的有用。

n 个结点形成的有 k 棵树的森林,要求给定的 k 个点中不存在两个点在同一棵树内的方案数为 k×nnk1

证明暂时先咕了。

图联通问题(Cayley 公式再扩展)#

有一个 n 个点和若干条边的无向图,共有 k 个连通块,大小分别为 s1,s2,,sk,现在要加 k1 条边使得整个图联通,则方案数为 nk2i=1ksi

证明不会,似乎可以用 Matrix-Tree 或多元二项式定理证。

posted @   KingPowers  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
CONTENTS