zoukankan      html  css  js  c++  java
  • Prufer编码

    Prufer编码

    1.概念

    给定一棵带标号的无根树,找出编号最小的叶子结点,写下与它相邻的节点的编号,然后删掉这个叶子结点。反复执行这个操作直到只剩两个节点为止。由于节点数(n>2)的树总存在叶子节点,因此一棵(n)个节点的无根树唯一对应了一个长度为(n - 2)的数列,数列中的每个数都在(1)(n)的范围内。

    将Prufer序列中第一个数与没有出现在Prufer序列中的第一个数连边;之后按次序依次将第(2,3,…,n - 2)个数与其对应的未出现在Prufer序列中的第(2,3,…,n - 2)个数连边;最后剩下两个点直接连边。这样就重新构建出来了原来的无根树。

    这样每一棵(n)个节点的无根树唯一的对应了一个(n - 2)长度的数列,数列中的每个数都在(1)(n)的范围内。

    2.性质

    1. 易得(n)个点的无向完全图的生成树计数((n)个点的有标号无根树的计数)为(n^{n-2})
    2. Prufer序列中某个编号出现的次数等于此编号节点在树中的度数减一。
    3. (n)个节点,每个节点的度数分别为(D_{1}, D_{2}, …,D_{n}),此时无根树的个数为(dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!]})个,因为此时Prufer编码中的编号(i)出现了(D_{i} - 1)次。(即(n - 2)个元素,各不相同,其中第(i)种元素有(D_{i} - 1)个,求排列数)(例题:洛谷P2290
    4. 与上问条件相同,另有(m)个节点度数未知。设(left = (n - 2) - (D_{1} - 1) - (D_{2} - 1) - … - (D_{n} - 1)),则已知节点可能组合方式为(dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!] cdot left}),剩余(left)个位置由(m)个未知度数的节点自由填补,方案数为(m^{left})。所以答案为(dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!] cdot left} imes m^{left})。(例题:洛谷P2624(因为有高精所以没写)
  • 相关阅读:
    phpMyAdmin <= 4.0.4.1 import.php GLOBALS变量注入漏洞
    第一个VC++ win32程序 绘制简单图形
    QTP 9.2 下载&破解
    MacOS下使用VMware5 破解 安装win7 ISO 激活
    win7 原版下载&激活
    jQuery.ui autoComplete使用
    SubLime2 win + mac keygen
    为Chrome添加https搜索 自定义地址栏搜索引擎
    jQuery validate入门
    Bootstrap dropdown 使用
  • 原文地址:https://www.cnblogs.com/manziqi/p/9581155.html
Copyright © 2011-2022 走看看