zoukankan      html  css  js  c++  java
  • prufer序列学习笔记

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

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

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

    至于如何用prufer序列反推出树,也可以用优先队列做到 $O(nlog 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_2cdots,d_n$ 的无根树个数为 $dfrac{(n-2)!}{prod(d_i-1)!}$。因为 $i$ 在prufer序列中会出现 $d_i-1$ 次,最后计算出来就是这个式子。

    一些例题:

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

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

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

  • 相关阅读:
    Some day some time we will do
    qemu-img 的使用
    虚拟化qemu-img的简单用法。
    linux 后台执行命令
    C#向服务器上传文件问题
    Canvas保存为图片
    一个Sql备注
    fabric Clone
    Js 正则获取Html元素
    Graphic 完成文字缩放
  • 原文地址:https://www.cnblogs.com/1000Suns/p/10628641.html
Copyright © 2011-2022 走看看