介绍

  其实是\(pr\ddot{u}fer\)序列

  什么是prufer序列?

  我们认为度数为\(1\)的点是叶子节点

  有一颗无根树,每次选出编号最小的叶子节点,加到当前prufer序列的后面,然后删掉这个节点。直到剩下两个点为止。

  这样会得到一个长度为\(n-2\),每个数都是\(1\text{~}n\)的序列。

  可以看出,每棵无根树都对应唯一一个序列。

  我们发现,所有叶子节点都不在prufer序列中,一个度数为\(d\)的点在prufer序列中的出现次数是\(d-1\)。

  那么怎样从一个prufer序列得到一棵树呢?

  令\(A=\{1,2,\ldots,n\}\)

  每次我们选择最小的在\(A\)中且不在prufer序列中的点\(x\),连一条边到prufer序列的第一个点\(y\),然后把\(x\)从\(A\)中删掉,把prufer序列的第一个数删掉,直到prufer序列为空。这样\(A\)中还会剩下两个数,在这两个点之间连边即可。

  现在我们要证明每个prufer序列都唯一对应一棵树。

  因为每个时候\(A\)的大小都比prufer序列的长度大\(2\),所以每次一定能找到一个没在剩下的prufer序列里出现过的数。所以每个prufer序列都对应唯一一棵树。

  prufer序列有\(n^{n-2}\)个,所以\(n\)个点带标号无根树就有\(n^{n-2}\)种。

应用

  prufer是一种处理和树有关的计数问题的非常有用的工具。

  可以把树的计数问题转成数列的计数问题。.

  显然数列的计数比树的计数简单很多。

  比如说,一个点的度数最多为\(d\),那么这个点在prufer序列中的出现次数\(\leq d-1\)

  比如说,生成一个由\(k\)棵树构成的森林,那么前面\(n-k-1\)个数可以是\(1\text{~}n\),第\(n-k\)个数是这\(k\)个根中的一个,还要乘上选\(k\)个根的方案数,答案为\(\binom{n}{k}\times n^{n-k-1}\times k\)

prufer序列的更多相关文章

  1. bzoj 1005 1211 prufer序列总结

    两道题目大意都是根据每个点的度数来构建一棵无根树来确定有多少种构建方法 这里构建无根树要用到的是prufer序列的知识 先很无耻地抄袭了一段百度百科中的prufer序列的知识: 将树转化成Prufer ...

  2. bzoj1211: prufer序列 | [HNOI2004]树的计数

    题目大意: 告诉你树上每个节点的度数,让你构建出这样一棵树,问能够构建出树的种树 这里注意数量为0的情况,就是 当 n=1时,节点度数>0 n>1时,所有节点度数相加-n!=n-2 可以通 ...

  3. [BZOJ1211][HNOI2004]树的计数(Prufer序列)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1211 分析: 关于无根树的组合数学问题肯定想到Prufer序列,类似bzoj1005那 ...

  4. 树的计数 + prufer序列与Cayley公式 学习笔记

    首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.ne ...

  5. BZOJ 1211 HNOI2004 树的计数 Prufer序列

    题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后 ...

  6. prufer序列笔记

    prufer序列 度娘的定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 对于一棵确定 ...

  7. BZOJ1430小猴打架——prufer序列

    题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架 的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森林的小猴都会 ...

  8. 【XSY2519】神经元 prufer序列 DP

    题目描述 有\(n\)点,每个点有度数限制,\(\forall i(1\leq i\leq n)\),让你选出\(i\)个点,再构造一棵生成树,要求每个点的度数不超过度数限制.问你有多少种方案. \( ...

  9. 【BZOJ1211】【HNOI2004】树的计数 prufer序列

    题目描述 给你\(n\)和\(n\)个点的度数,问你有多少个满足度数要求的生成树. 无解输出\(0\).保证答案不超过\({10}^{17}\). \(n\leq 150\) 题解 考虑prufer序 ...

随机推荐

  1. OM1、OM2、OM3和OM4光纤之间的区别

    “OM”stand for optical multi-mode,即光模式,是多模光纤表示光纤等级的标准.不同等级传输时的带宽和最大距离不同,从以下几个方面分析它们之间的区别.  一.OM1.OM2. ...

  2. 001-电脑操作规范-2019年03月.doc

    001-电脑操作规范-2019年03月.doc   本文作者:徐晓亮 BoAi 作者腾讯QQ号码:595076941   /////////////////////////////////////// ...

  3. 安装SQL Server时,提示VS Shell 安装失败,退出代码为 1638。

    在安装SQL Server时,提示“安装 Microsoft Visual C++ 2015 Redistributable 时出错VS Shell 安装失败,退出代码为 1638”. 原因:是由于你 ...

  4. p151开映射札记

    1. 如何理解这句话? 2.连续有什么用? 3.为什么区间包含,经过算子T还是包含? 谢谢 谢谢学长 我懂了  1.2.     3有点儿模糊 1.连续等价于开集原像是开集,而可逆算子的逆的原像就是的 ...

  5. RabbitMQ 安装与使用

    RabbitMQ 安装与使用   前言 吃多了拉就是队列,吃饱了吐就是栈 使用场景 对操作的实时性要求不高,而需要执行的任务极为耗时:(发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志) 存在异 ...

  6. 使用junit测试

    package creeper; import java.util.Scanner; public class size { private static int intercePosition = ...

  7. semantic-ui 模态窗口

    模态窗口即加了ui modal的class的div而已,会有点像是alert弹出框的形式,但是美观一点点.

  8. Linux 典型应用之缓存服务

    memcached 安装和简单使用 yum install memcached 启动 -d 表示以守护进程的方式启动 memcached -d 安装telnet 它可以检测某个端口是否是通的,可以发送 ...

  9. SpringMvc的Controller singleton synchronized

    SpringMvc的controller是singleton的(非线程安全的) - lvyuanj的专栏 - CSDN博客 https://blog.csdn.net/lvyuanj/article/ ...

  10. IdentityServer4【QuickStart】之设置和概述

    设置和概述 有两个基本的方式来开启一个新的IdentityServer项目: 从头开始 从asp.net Identity模板开始 如果你从头开始,我们提供了一些基于内存中构建的存储,所以你不必一开始 ...