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(因为有高精所以没写)
  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/manziqi/p/9581155.html
Copyright © 2011-2022 走看看