介绍

  其实是\(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. Codeforces Round #481 (Div. 3)Petya's Exams CodeForces - 978G

    Petya studies at university. The current academic year finishes with nn special days. Petya needs to ...

  2. mysql触发器,视图,游标

    什么事触发器: 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以联级运算.如,某表上的 ...

  3. 使用git将本地项目推送到码云私有仓库

    https://blog.csdn.net/qq_33876553/article/details/80111946 2018年04月27日 19:53:33 桥路丶 阅读数:2958 前言 之前博主 ...

  4. java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader

    我的解决办法:    1.如果是application工程,则在程序中打印出         system.out.println(System.getProperty("java.endo ...

  5. PAT 7-12 拯救007

    在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据 ...

  6. 转:Linux下查看tomcat占用端口

    https://blog.csdn.net/liufuwu1/article/details/71123597[root@server-crm mysql]# ps -ef | grep " ...

  7. [转帖]NotePad++编辑Linux中的文件

    NotePad++编辑Linux中的文件 https://blog.csdn.net/chengqiuming/article/details/78882692 原作者 未经允许不允许转帖 加密自己参 ...

  8. 2.请介绍一下List和ArrayList的区别,ArrayList和HashSet区别

    第一问: List是接口,ArrayList实现了List接口. 第二问: ArrayList实现了List接口,HashSet实现了Set接口,List和Set都是继承Collection接口. A ...

  9. java 从键盘录入的三种方法

    详细内容连接 https://blog.csdn.net/StriverLi/article/details/52984066

  10. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...