prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\)。

prufer 序列和原树之间都可以唯一地相互转化。


构造

构造 prufer 序列分为如下的步骤:

  1. 找到一个编号最小的度数为 \(1\) 的点;
  2. 与这个点相邻的点的编号加入 prufer 序列的后面;
  3. 删除这个点;
  4. 重复上述步骤,知道原树只剩下 \(2\) 个点,这两个点之间应该有一条边。

还原

令集合 \(V = \{1, 2, \cdots, n\}\)。

  1. 取出 prufer 序列最前面的点 \(x\);
  2. 找到 \(V\) 序列中最小的没有在现在的 prufer 序列中出现过的点 \(y\);
  3. 将 \(x\) 和 \(y\) 连边并从集合 \(V\) 中删除 \(y\),从 \(prufer\) 序列中删除最前面的 \(x\)。

  4. 重复上述步骤,直到 prufer 序列被遍历完;此时 \(V\) 中应该还剩下两个点,给它们连边。

考虑这样还原为什么是对的。

每一次被配对的 \(y\),应该是原树在删掉 prufer 序列 \(x\) 之前的点后的叶子。

那么根据之前的构造步骤,这个 \(y\) 必须满足:

  1. 是个叶子,这个条件等价于没有在后面的 prufer 序列中出现。
  2. 之前没有被选过;
  3. 编号最小。

于是就有了上面的选 \(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 序列 学习笔记的更多相关文章

  1. prufer序列学习笔记

    prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列 ...

  2. prufer编码学习笔记

    prufer 编码 对于一个无根树,他的 prufer 编码是这样确定的: 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个 ...

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

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

  4. [学习笔记]prufer序列

    前言 PKUWC和NOIWC都考察了prufer序列,结果统统爆零 prufer序列就是有标号生成树对序列的映射 prufer序列生成 每次选择编号最小的叶子删掉,把叶子的父亲加入prufer序列,直 ...

  5. python 学习笔记1(序列;if/for/while;函数;类)

    本系列为一个博客的学习笔记,一部分为我原创. 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 1. print 可以打印 有时需要 ...

  6. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  7. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  8. prufer序列笔记

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

  9. Prufer codes与Generalized Cayley's Formula学习笔记

    \(Prufer\)序列 在一棵\(n\)个点带标号无根树里,我们定义这棵树的\(Prufer\)序列为执行以下操作后得到的序列 1.若当前树中只剩下两个节点,退出,否则执行\(2\) 2.令\(u\ ...

随机推荐

  1. Handling Configuration Changes with Fragments

    This post addresses a common question that is frequently asked on StackOverflow: What is the best wa ...

  2. WAMPSERVER php

    The Apache service named reported the following error:>>> (OS 10013)An attempt was made to ...

  3. 四、robotframework生成几种随机数

    1.random()生成0<=n<1之间的随机实数--它会生成一个随机的浮点数,范围是在0.0~1.0之间.: ${num}   evaluate random.random()   ra ...

  4. Ajax初探

    一.AJAX准备知识:JSON 1.stringify与parse方法 2.和XML的比较 二.AJAX简介 AJAX常见应用情景 AJAX的优缺点 优点: 三.jQuery实现的AJAX $.aja ...

  5. vue-element-template模板项目使用记录(持续更新)

    1. npm 使用注意事项: a. node.js 使用 v8.16.0 版本,使用 v10 版本会有各种莫名其妙的报错 b. 开箱先改淘宝镜像: npm config set registry ht ...

  6. Helvetic Coding Contest 2019 online mirror (teams allowed, unrated)

    http://codeforces.com/contest/1184 A1 找一对整数,使x^x+2xy+x+1=r 变换成一个分式,保证整除 #include<iostream> #in ...

  7. Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件

    Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件 表达式中的函数有 ...

  8. ecshop启用gzip后,后台不能打开不能访问的问题

    上传测试的时候,站点显示无法打开.随后我用网址打开根目录的robots文件.图片.静态页···全部可以正常打开··· 我尴尬···一一检查后,我就怀疑是不是客户当初设置gzip压缩的问题了.但连后台都 ...

  9. windows10配置Docker容器独立IP地址互相通信

    Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 ...

  10. Java 操作pdf与excel

    java 操作pdf组件  itextpdf <dependency> <groupId>com.itextpdf</groupId> <artifactId ...