prufer序列是一个定义在无根树上的东西。

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

这个构造可以用优先队列做到 $O(n\log n)$。

至于如何用prufer序列反推出树,我还有点没看懂怎么 $O(n\log n)$,以后看懂了再来填坑吧。


prufer序列的一些性质:

  1. 一棵 $n$ 个点的无根树prufer序列长度为 $n-2$。
  2. 无根树和prufer序列一一对应,一个无根树唯一对应一个prufer序列,一个prufer序列唯一对应一个无根树。
  3. 一个在树中度数为 $d$ 的点在prufer序列中出现了恰好 $d-1$ 次。

那么就能推出一些常用结论:

  1. $n$ 个点的无根树(带标号)有 $n^{n-2}$ 棵。(prufer序列长度为 $n-2$,每个位置都可以随便选 $1$ 到 $n$ 的数)
  2. $n$ 个点的度数为 $d_1,d_2\cdots,d_n$ 的无根树个数为 $\dfrac{(n-2)!}{\prod(d_i-1)!}$。因为 $i$ 在prufer序列中会出现 $d_i-1$ 次,最后计算出来就是这个式子。

一些例题:

洛谷2290 [HNOI2004]树的计数(题解待填充)

洛谷2624 [HNOI2008]明明的烦恼(题解待填充)

洛谷5219 无聊的难水题 I(题解待填充)

prufer序列学习笔记的更多相关文章

  1. prufer 序列 学习笔记

    prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\). 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. [转帖]一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS

    一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS https://home.cnblogs.com/u/beyang/ 一台服务器,两个域名 首先购买https,获取到CA证 ...

  2. [转帖]Docker save and load镜像保存

    Docker save and load镜像保存 https://www.cnblogs.com/zhuochong/p/10064350.html docker save 和 load 以及 imp ...

  3. ORA-28000: the account is locked解决办法

    ORA-28000: the account is locked第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;第二步:选择myjob, ...

  4. 关于controller的书写

    private Logger log = LoggerFactory.getLogger(ReportFormController.class); // 读取配置文件 ResourceBundle r ...

  5. InputFormat的数据划分、Split调度、数据读取

    在执行一个Job的时候,Hadoop会将输入数据划分成N个Split,然后启动相应的N个Map程序来分别处理它们.数据如何划分?Split如何调度(如何决定处理Split的Map程序应该运行在哪台Ta ...

  6. Python 命令行工具 argparse 模块使用详解

    先来介绍一把最基本的用法 import argparse parser = argparse.ArgumentParser() parser.parse_args() 在执行 parse_args() ...

  7. spring 注解 之 AOP基于@Aspect的AOP配置

    Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component  @A ...

  8. QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装

    0 安装qtp .exe 文件 安装 插件文件(如delph) 1 关闭 启动程序: 将要操作的程序-存入localdatatable中 设置 迭代一次 rem SystemUtil.ClosePro ...

  9. vue開發環境搭建

    npm(node package manager),nodejs的包管理器,用於nodejs插件的安裝.卸載和管理依賴. 安裝npm: 檢查npm是否安裝成功及版本:npm -v 卸載npm: 更新n ...

  10. SELECT IDENT_CURRENT(tableName)和自增长列的纠结

    项目中要用到一个功能:主表主键为自增长,要求在插入主表数据前先获得主表要插入数据的主键ID值,用在插入子表时获取主键ID.在网上搜了一下,发现SELECT IDENT_CURRENT(TableNam ...