Prufer 序列

Prufer 序列

基本介绍

Prufer 序列是一个大小为 n2,值域在 [1,n] 的序列。完全图生成树和 Prufer 序列形成双射。

对树建立 Prufer 序列:每次选择编号最小的叶节点删去,在序列中记录叶节点的父亲,重复 n2 次结束。

用 Prufer 序列建立树:计算出每个节点的度数,每次选择一个度数为 1 的编号最小的节点与当前 Prufer 序列中的开头节点连接,两个点度数同时减 1,删去 Prufer 序列的开头,重复 n2 次,剩下两个度数为 1 的点连起来。

两种操作均可以线性实现。

生成函数形式

(x1+x2+x3++xn)n2=Tixidi1
其中 T 是枚举一棵 Kn 的生成树,di 是生成树中点 i 的度数。

我们有了这个形式可以很轻松的计算这样一个问题:
对于 n 个点的有标号图有 k 个连通块,连通块点数为 {a},我们希望添加 k1 条边使得整个图连通,求方案数。

考虑答案即为 Ti=1kaidi,这和上述生成函数形式很接近,我们稍加变换可以得到:
i=1kaiTi=1kaidi1=i=1kai×nk2

Cayley 公式与扩展 Cayley 公式

Cayley 公式:完全图 Knnn2 棵生成树。

扩展 Cayley 公式:对于钦定的 k 个点,完全图 Knknnk1 个生成森林满足 k 个点在不同的树中。

证明可以生成函数+拉反。

完全 k 分图的生成树个数

完全 2 分图 Kn,m 的生成树个数是一个经典问题,答案为 nm1mn1。证明可以考虑 Matrix-Tree 或者定义一个魔改的 Prufer 序列。

完全 k 分图的生成树个数的答案是:nk2i=1k(nni)ni1。证明可以考虑容斥(完全图挖掉 k 个团,大力容斥每个团选的边)。

posted @   juju527  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2022-07-07 一个平衡问题的高效解法
点击右上角即可分享
微信分享提示