【学习笔记】prufer 序列
内容
在一张图上有 个节点,可以产生的生成树个数为
证明
一一对应法。
设个点为:.
假设 是其中一棵树,树叶中有标号最小的,设为 , 的临界点为
从图中消去 点和边 , 点便成为消去后余下的树 的叶子节点。
在树 中继续寻找标号最小的树叶,设为 , 的邻接点为 ,从 中消去 及边 。
如此步骤共执行 次,直到最后只剩下一条边为止.于是一棵树对应一序列
是 到 的数,并且允许重复。
反过来从 可以恢复树 本身,过程:在序列 中找出第一个不出现在序列 中的数
这个数显然便是 ,同时形成的边 ,并从 中消去 ,从 中消去
在余下的序列中继续以上的步骤 次,直到序列 为空集为止。这时序列(1)剩下的两个数,边是树 的最后一条边。
上面的过程说明过 个已知标号的顶点的树和序列 一一对应,所以 个有标号(相当于互异)的顶点的树的数目,为 个.
一个点在 序列中出现的次数,为其在无根树中的出度的个数
这样我们可以把树的计数转化到序列计数
例题
构树
对该问题的解决有非常明显的刻画: 表示 点为根的子树里面有 个边被选择保留,根节点所在的联通块大小为 的对答案的贡献
这个 配合 序列就可以完成转移:
个大小为 个联通块所形成的树的数量是
上面结论有个简单的证明:考察在一个树的构成方案,每条边的形成方案是连接的两个联通块大小的乘积
那么所有边的贡献相乘则结果为
关注到 序列中每个点的出现次数是度数减一,求和之余还要再补充一份
那么将 分散到每个联通块上面统计,树形 的过程中出现 的边被断掉那么就乘 转移
具体形式相对容易,注意减去已经 掉的边在序列里面的贡献,也就是在断开之后边 后 分别包含 两个联通块连起来的方案要减一
进一步优化考虑观察最后一维必要性,考虑从一堆有标号点里面选一个的方案数是堆的大小,那么 表示是不是选过点了,转移和上面类似
复杂度和树上背包一致,为
指数做法给了非常多分数让暴力选手体验也非常良好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律