prufer 编码

对于一个无根树,他的 prufer 编码是这样确定的:

  • 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个点从树中删掉
  • 如果当前树只有两个节点了,就停止

那么,通过给定的无根树求 prufer 编码就很简单了

比如下面这个无根树,它的 prufer 编码就是\(\texttt{125214}\)

这个 prufer 编码有一些很显然的性质

首先长度肯定是\(n-2\),但每个元素可能相同,然后对于每个无根树,它的 prufer 编码肯定也唯一

如果编码的每个元素都相同,那么它可以是一个编号最大的点连向其它所有点(特殊的菊花图),如果都不同,可以是一个链

当然,这里说“可以”是因为有可能还存在其它的构造方式

那么,prufer 编码对应的树是否唯一?

也就是说,每一个编码是不是只能求出唯一的树?

是可以的,先给出求的方式:

设这棵树点的集合为\(V\),初始状态下\(V=\{1,2,\cdots,n\}\)

  • 每次找到编码最前面的一个点,在\(V\)中找到不在编码序列中出现的编号最小的点,连边,然后分别把他们在\(V\)中和编码中删掉
  • 显然,当编码被全部删掉后,\(V\)中还有两个元素,再把他们两个连边,结束

然后验证一下刚才那个图,发现是正确的

可以感性理解一下,编码序列的第一个数,就是我们第一次删除叶子节点以后添加的它的相邻节点,而这个被删掉的节点肯定不在编码中,它也是序号最小的,所以还原树的时候就要把它和它相邻的那个被添加到编码中的点连边

然后每次都这样做就得出了原树

又因为在找编码的时候最后剩了两个节点,那两个节点肯定是连在一起的,所以这就是为什么要把\(V\)中剩下的两个点连边

所以,上面通过 prufer 编码求树的操作,也是唯一的


那么可以得出一下更深入的性质:

  • prufer 编码和无根树一一对应
  • 对于有\(n\)个节点的无根树,有\(n^{n-2}\)种构造方式

    因为编码和树一一对应,所以长度为\(n-2\),每一位有\(n\)种取值的编码的种类数是\(n^{n-2}\),这个东西也叫做 Cayley 公式
  • 对于有\(n\)个节点的有根树,有\(n^{n-1}\)种构造方式,很显然,就是让每个节点轮流当根,然后运用上面那个式子
  • 度数为\(k\)的点,在 prufer 编码中出现的次数是\(k-1\)

    因为在\(k-1\)个点被删掉的时候,它被加入编码,此时度数为\(1\),直接被删掉不会加入编码中
  • 对于给定\(n\)个点的度数分别是\(k_1,k_2,\cdots,k_n\)的有根树,有\(\dfrac{(n-2)!}{\prod (k_i-1)!}\)种构造方式

    问题即为求每个元素出现\(k_i\)次的排列个数,分子的\((n-2)!\)是说,没有这个限制条件的全排列个数,分母上是去重,就是说如果相同的元素交换位置应该算一种方案,所以要除以它的阶乘
  • 上面那个性质再扩展一下,假设有\(cnt\)个点对度数有要求,其它的没要求,设\(sum=\sum_{i=1}^{cnt}k_i\),则方式有:

    \(\tbinom{n-2}{sum}\frac{sum!}{\prod_{i=1}^{cnt}(k_i-1)!}\times (n-cnt)^{n-2-sum}\)

    解释一下什么意思,那个组合数就是从\(n-2\)个数里面算出\(sum\)个,然后对这\(sum\)个用上一条性质的公式,然后还有\(n-2-sum\)个位置可以任意排列剩下的\(n-cnt\)个点,所以得出上面式子

应该没有了,如果有大佬知道其它性质欢迎在评论区给出

然后有一些题,这些在tulun-prufer编码的分类中有题解

P4430 小猴打架

P4981 父子

P2290 [HNOI2004]树的计数

P2624 [HNOI2008]明明的烦恼

prufer编码学习笔记的更多相关文章

  1. prufer序列学习笔记

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

  2. Base64编码——学习笔记

    Base64是一种编码方式. 非加密 chcp->936 编码流程: 位数不够后面补0,例中补了2个0. 末尾加=表示结束符. GB2312,有些敏感词不能显示. GBK,是GB2312升级版. ...

  3. prufer 序列 学习笔记

    prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\). prufer 序列和原树之间都可以唯一地相互转化. 构造 构造 prufer 序 ...

  4. 零基础HTML编码学习笔记

    任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...

  5. 稀疏编码学习笔记(二)L2范数

    L2范数 除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ||W||2.它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫 ...

  6. 学习笔记:Prufer 编码

    Prufer 编码可以将无根树与序列之间进行转化. 一个 \(n\) 个点.区分编号的无向图 和 Prufer 序列一定是一一对应的,下面会给出映射方式. 借此可以证明 Cayley 定理: \(n\ ...

  7. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  9. 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码

    一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...

随机推荐

  1. python 函数--装饰器

    一.装饰器 1.为什么要用装饰器? 装饰器的功能:在不修改原函数以及调用方式的情况下对原函数功能进行扩展. 二.开放和封闭原则 1.对扩展是开放的 2.对修改是封闭的 三.装饰器的固有结构 impor ...

  2. 文本表格文件指定分隔符分列转Excel(java实现)

    我的需求: 嗯,实习中遇到,需要过滤数据然后以指定的列名输出为excel 我是这样解决的: 写出到一个文本或者表格文件然后指定分隔符分列的输出excel,因为要设计去重处理. 我需要做的: 写一个文本 ...

  3. Pytest系列(14)- 配置文件pytest.ini的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest配置文件可以改变 ...

  4. 计时线程Runnable和Handler的结合

    利用Runnable和Handler,来创建计时线程 private double recodeTime = 0;// 用于计时 private double econdTime = 0;// 用于计 ...

  5. commonJS、AMD和CMD之间的区别

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  6. Eclipse版本控制

    各版本的区别: 1.Eclipse IDE for Java Developers 是Eclipse的platform加上JDT插件,用来java开发的 2.Eclipse IDE for Java  ...

  7. 弱智破解法——用python破解WIFI

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:李嘉图 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  8. [转载]利用分块传输绕过WAF进行SQL注入

    原理 客户端给服务器发送数据的时候,如果我们利用协议去制作payload,就可以绕过http协议的waf,实现SQL注入 分块传输编码(Chunked transfer encoding)是HTTP中 ...

  9. SSL 3.0 POODLE攻击信息泄露漏洞_CVE-2014-3566

    0x01 SSL3.0简介 我们知道最开始HTTP协议传输数据的时候,数据是不加密的,不安全的,网景公司针对此,推出了SSL(secure socket layer)安全套接层.SSL3.0时,IET ...

  10. 靠!安装了macOS Catalina(10.15.4)后,文件系统都乱套了

    最近闲来无事,决定将我的两台apple电脑升级成最新的苹果系统(macOS Catalina),当然,由于以前升级过多次mac系统,所以毫不犹豫从app store下载了最新的macOS Cetali ...