模板:Prufer序列
所謂 Prufer 序列,就是 Prufer 發明的序列。
(逃)
前言
優雅的神奇魔術。
看名字很高大難,但實際上是高大清(小清新)。
很簡單的建立起樹與序列之間的雙射,且這個序列的性質非常良好,且這個序列的性質與度數密切相關。
能優雅簡潔的證明一些惡心的結論。
注意! Prufer序列不考慮只有一個結點的樹。
解析
定義
把一棵樹轉化為 Prufer 序列的流程如下:
最終我們得到的長度為 n?2n-2n?2 的序列即最終的 Prufer 序列。
性質
其有如下性質:
都較為顯然。
把樹轉化為 Prufer 序列
利用 Prufer 序列的定義,開一個堆存當前的度數為1的點,即可 O(nlog?n)O(n\log n)O(nlogn) 的構造。
但可以做到線性。
維護一個指針 ppp,從1掃到n,表示當前編號最小的一度點。每次后移指針知道找到一個一度點,將其加入 Prufer 序列,如果父親減完度數變成了一度點且編號小于 ppp 則將父親加入序列,并遞歸的考慮祖父,否則直接忽略。
注意這么做最后會得到一個 n?1n-1n?1 的序列,因為最后會把和 nnn 相連的點也刪去。把序列尾抹掉即可。
把 Prufer 序列轉化為樹
利用 Prufer 序列的性質2,我們可以得到每個點的度數。
每次找到最小的一度點,它的父親就是當前序列的隊首元素,將其與隊首連邊,隊首的度數減一,并后移隊首指針。
和樹轉化為 Prufer 序列類似的,我們也可以維護一個指針 ppp 做到線性。
注意,由于 Prufer 序列的長度只有 n-2,我們必然只為 n-2 個結點分配了“父親”(即連了n-2條邊),最后我們最后找到那個沒有被分配父親的非 n 的點,將其與 n 相連即可。
凱萊定理
通過上面的構造我們可以知道,有標號無根樹和Prufer序列是雙射關系。
Prufer 序列的個數顯然為 nn?2n^{n-2}nn?2 個,那么我們也就自然得出了凱萊定理:
nnn 個結點的有標號無根樹有 nn?2n^{n-2}nn?2 個。
總結
以上是生活随笔為你收集整理的模板:Prufer序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑网3天策秘籍出处及选择推荐
- 下一篇: 继电器模块怎么用