$Prufer$序列
\(Prufer\)序列
\(Prufer\)序列与树的相互转换:
树->\(Prufer\)序列
找到一个编号最小的叶子结点,把这个点删掉并且把跟他连着的那个点的编号加入\(Prufer\)序列。
\(Prufer\)序列->树
设集合\(S={1,\cdots,n}\)
找到一个不在\(Prufer\)序列中且在\(S\)中的数,将它与\(Prufer\)序列中的第一个元素连边,并将这个数和\(Prufer\)序列的第一个元素删掉。
最后\(S\)会剩下最后两个元素,把这两个元素连边。
性质
性质\(1\)
\(Prufer\)序列与无根树一一对应。
性质\(2\)
\(n\)个点有编号的无根树有\(n^{n-2}\)个。
或\(n\)个点的完全图的生成树个数有\(n^{n-2}\)个。
性质\(3\)
度数为\(d\)的点在\(Prufer\)序列中出现\(d-1\)次。
例题
[HNOI2004]树的计数
给定度数\(d_1\sim d_n\),求有多少树。
定理:给定度数\(d_1\sim d_n\)的无根树有\(\frac{(n-2)!}{\prod\limits_{i=1}^n{(d_i-1)!}}\)
证:
\(Prufer\)序列中\(i\)元素出现\(d_i-1\)次。
\(n-2\)个元素的排列有\((n-2)!\)。
然后每一种元素自己内部的排列有\((d_i-1)\)。
相除即可。实际上就是可重排列。
[HNOI2008]明明的烦恼
\(n\)个点给定\(k\)个点的度数\(d_1\sim d_k\),求有多少树。
这题是上一道题的拓展。
我们先设\(s=\sum\limits_{i=1}^k (d_i-1)\)。
在\(Prufer\)序列中这\(k\)个点会出现\(s\)次,这里的方案数为\({n-2}\choose{s}\)。
然后我们考虑这\(k\)个点的排列,跟上一问一样的计算,方案数为\(\frac{s!}{\prod\limits_{i=1}^k (d_i-1)}\)。
最后我们考虑剩下\(n-2-s\)个位置,每个位置可以填\(n-k\)个数中的一个,方案数为\((n-k)^{n-2-s}\)。
所以总的答案就是\({{n-2}\choose{k}}\frac{s!}{\prod\limits_{i=1}^k (d_i-1)}(n-k)^{n-2-s}\)
随机推荐
- node.js之CommonJS
1.CommonJS 我们只是在js文件中写下console.log('This is a test.');这句代码,node.js执行该js文件时: ( function(exports, requ ...
- ELEMENT-UI 封装el-table 局部刷新row
//关于封装的el-table行数据更新后如何局部更新row row.status=status; this.$set(this.$refs.elTable.$data.tableData,index ...
- Python 标准库、第三方库
Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...
- 深入理解二阶段提交协议(DDB对XA悬挂事务的处理分析)(一)
https://sq.163yun.com/blog/article/165554812476866560
- AcWing:105. 七夕祭(前缀和 + 中位数 + 分治 + 贪心)
七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...
- JS框架_(JQuery.js)图片相册掀开切换效果
百度云盘 传送门 密码:y0dk 图片掀开切换效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- 如何快速查询中科院JCR分区和汤森路透JCR分区
参考: https://blog.csdn.net/chichuhe/article/details/83054624 https://blog.csdn.net/Sunflower02/articl ...
- MSO Transponder 页面开发思路
1. 确定Transponder开发页面分类,定义负责模块 2. 定义模块页面布局 3. 选择页面各数据对应的控件类型 4. 选定控件对应set/get所用方式 快捷键链接设置: http://www ...
- C++11获取当前毫秒数
获取当前毫秒数 主要是打印日志的时候用到 / CLOCKS_PER_SEC); 头文件为ctime
- 常用javaScript小常识
javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...