prufer 序列 学习笔记
prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\)。
prufer 序列和原树之间都可以唯一地相互转化。
构造
构造 prufer 序列分为如下的步骤:
- 找到一个编号最小的度数为 \(1\) 的点;
- 将与这个点相邻的点的编号加入 prufer 序列的后面;
- 删除这个点;
- 重复上述步骤,知道原树只剩下 \(2\) 个点,这两个点之间应该有一条边。
还原
令集合 \(V = \{1, 2, \cdots, n\}\)。
- 取出 prufer 序列最前面的点 \(x\);
- 找到 \(V\) 序列中最小的没有在现在的 prufer 序列中出现过的点 \(y\);
将 \(x\) 和 \(y\) 连边并从集合 \(V\) 中删除 \(y\),从 \(prufer\) 序列中删除最前面的 \(x\)。
重复上述步骤,直到 prufer 序列被遍历完;此时 \(V\) 中应该还剩下两个点,给它们连边。
考虑这样还原为什么是对的。
每一次被配对的 \(y\),应该是原树在删掉 prufer 序列 \(x\) 之前的点后的叶子。
那么根据之前的构造步骤,这个 \(y\) 必须满足:
- 是个叶子,这个条件等价于没有在后面的 prufer 序列中出现。
- 之前没有被选过;
- 编号最小。
于是就有了上面的选 \(y\) 的条件了。
性质
性质 1
一棵无根树的每个点的度数等于这个点在 prufer 序列中的出现次数 \(+1\)。
这个结论很显然,由构造过程就可以发现。
性质 2
一棵有标号的无根树的数量为 \(n^{n-2}\)。
可以发现我们的还原过程中,prufer 序列本身没有任何限制。
只要是长度为 \(n-2\),值域为 \(n\) 的序列,都可以还原成一棵树。
性质 3
如果限定了每个点的度数,编号为 \(i\) 的点的度数为 \(a_i\),那么方案为 \(\frac{(n-2)!}{\prod\limits_{i=1}^n a_i-1}\)。
显然必须有 \(\sum\limits_{i=1}^n a_i = 2(n-1) = 2n - 2\),于是 \(\sum\limits_{i=1}^n a_i - 1 = n - 2\),所以相当于是做一个可以重复元素的全排列。
例题
prufer 序列 学习笔记的更多相关文章
- prufer序列学习笔记
prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列 ...
- prufer编码学习笔记
prufer 编码 对于一个无根树,他的 prufer 编码是这样确定的: 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个 ...
- 树的计数 + prufer序列与Cayley公式 学习笔记
首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.ne ...
- [学习笔记]prufer序列
前言 PKUWC和NOIWC都考察了prufer序列,结果统统爆零 prufer序列就是有标号生成树对序列的映射 prufer序列生成 每次选择编号最小的叶子删掉,把叶子的父亲加入prufer序列,直 ...
- python 学习笔记1(序列;if/for/while;函数;类)
本系列为一个博客的学习笔记,一部分为我原创. 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 1. print 可以打印 有时需要 ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...
- prufer序列笔记
prufer序列 度娘的定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 对于一棵确定 ...
- Prufer codes与Generalized Cayley's Formula学习笔记
\(Prufer\)序列 在一棵\(n\)个点带标号无根树里,我们定义这棵树的\(Prufer\)序列为执行以下操作后得到的序列 1.若当前树中只剩下两个节点,退出,否则执行\(2\) 2.令\(u\ ...
随机推荐
- linux gsensor驱动分析【转】
本文转载自:http://blog.sina.com.cn/s/blog_89f592f501013sr2.html 本文以Bma250驱动为例子,详细介绍Gsensor设计的一个模板. gsenso ...
- ORA-00972
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as 日期时间 from dual;select to_char(sysdate,'YY ...
- fedora23中安装php-mysql等
scheme: [ski:M], ch本身还是发的k音, 如同school, 但爆破后发g 默认的, by default. 没有defaultly 基本上所有的短语, 修饰名词都是放在名词的后面的: ...
- 认识DOM(上)
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...
- CGI FastCGI WSGI 解析
我们将服务端程序分为了web服务器和应用程序服务器. web服务器是用于处理HTML文件,让客户可以通过浏览器进行访问.主流的有apache,IIS,nginx,lghttpd等. 应用服务器处理业务 ...
- 测开之路一百零二:jquery元素操作
jquery对元素操作,获取/替换文本(.text()).html(.html()).属性(.attr()).值(.val()) html代码 text() 根据标签获取文本值 同一个标签下筛选明细 ...
- Jmeter之完整的HTTP接口测试
目前很多接口都是基于HTTP的,所以针对HTTP接口测试的了解很重要,下面就简单说明一下,一个基于Jmeter上HTTP接口测试需要的内容. 一.一个HTTP接口测试需要最基础的内容 如下: 简单说明 ...
- 微信企业号 发送信息 shell
微信企业号发送信息shell #可作为shell函数模块调用,用于微信通知.jenkins发版微信通知等等 # 微信API官方文档 https://work.weixin.qq.com/api/doc ...
- JAVA在页面查看或下载服务器上的日志
1.配置 FileUtils类所需jar包的maven地址 <dependency> <groupId>commons-io</groupId> <artif ...
- Pku2054 Color a Tree
有一个N个结点的有根树,1是这个树的根.现在要对这N个结点依次进行染色,每个结点染色要花费1个单位的时候,同时要满足一个结点仅在其父亲被染色后才可被染色,每个结点有个权值Ci,如果我们在第Ti时间对i ...