初識prufer序列


前言

\(prufer\)序列應該是一個比較實用的東西。

\(hl666\)大佬說,一切與度數有關的樹上計數問題,都可以用它以及它的性質來解決。

而聽說\(ZJOI\)最近特別喜歡出計數題,所以有必要學一學。

轉化\(1\):從無根樹到\(prufer\)序列

現在,給你一棵樹,我們要考慮如何把它變成\(prufer\)序列。

我們需要重復進行以下操作,直至樹中只剩下兩個點:

  • 找到一個度數為\(1\),且編號最小的點。(其中編號最小保證了后面將會提到的\(prufer\)序列的唯一對應性,同時也方便從\(prufer\)序列轉化回無根樹)
  • 把這個點的父親節點加入序列,然后把這個點從樹中刪除。

然后我們就得到了一個長度為\(n-2\)的序列,這就是\(prufer\)序列。

所以它有什么實際意義呢?

我也不知道。

以上面的圖為例,我們可以模擬這一過程如下:

  • 找到\(4\)號節點,將其父結點加入序列,然后將其刪去。此時序列:\(\{2\}\)
  • 找到\(5\)號節點,將其父結點加入序列,然后將其刪去。此時序列:\(\{2,3\}\)
  • 找到\(3\)號節點,將其父結點加入序列,然后將其刪去。此時序列:\(\{2,3,1\}\)
  • 找到\(6\)號節點,將其父結點加入序列,然后將其刪去。此時序列:\(\{2,3,1,2\}\)
  • 找到\(2\)號節點,將其父結點加入序列,然后將其刪去。此時序列:\(\{2,3,1,2,1\}\)

所以,最后得到的\(prufer\)序列就是\(\{2,3,1,2,1\}\)

轉化\(2\):從\(prufer\)序列到無根樹

還是以剛才那棵樹為例吧,我們要考慮如何把它的\(prufer\)序列變回它本身。

我們需要重復進行以下操作,直至點集中只剩下兩個點:(初始化所有點都在點集中)

  • 取出\(prufer\)序列最前面的元素\(x\)
  • 取出在點集中的、且當前不在\(prufer\)序列中的最小元素\(y\)。(這恰好呼應了前面提到過的選取編號最小的節點)
  • \(x,y\)之間連接一條邊。(注意前面的取出相當於刪除)

最后,我們在點集中剩下的兩個點中連一條邊。

顯然這有\(n-1\)條邊,且絕對不會形成環,因此它是一棵樹,且就是原樹。

以上面的序列為例,我們可以模擬這一過程如下:

  • 取出\(2,4\)連邊。此時\(prufer\)序列:\(\{3,1,2,1\}\),點集:\(\{1,2,3,5,6,7\}\)
  • 取出\(3,5\)連邊。此時\(prufer\)序列:\(\{1,2,1\}\),點集:\(\{1,2,3,6,7\}\)
  • 取出\(1,3\)連邊。此時\(prufer\)序列:\(\{2,1\}\),點集:\(\{1,2,6,7\}\)
  • 取出\(2,6\)連邊。此時\(prufer\)序列:\(\{1\}\),點集:\(\{1,2,7\}\)
  • 取出\(1,2\)連邊。此時\(prufer\)序列:\(\{\}\),點集:\(\{1,7\}\)

最后再在\(1,7\)間連邊,就可以得到原樹了。

\(prufer\)序列的性質及相關結論

講了這么多,我們最關鍵的還是\(prufer\)序列的一些性質,以及與其有關的一些結論。(畢竟前面也提到過,我也不知道這東西有什么實際意義

  • 重要性質:\(prufer\)序列與無根樹一一對應。

    這應該顯然吧,通過前面的介紹應該可以直接得出。

    而由這個性質,我們才能推導出后面的結論。

  • 度數為\(d_i\)的節點會在\(prufer\)序列中出現\(d_i-1\)

    當某個節點度數為\(1\)時,會直接被刪掉,否則每少掉一個相鄰的節點,它就會在序列中出現\(1\)次。

    因此共出現\(d_i-1\)次。

  • 一個\(n\)個節點的完全圖的生成樹個數為\(n^{n-2}\)

    對於一個\(n\)個點的無根樹,它的\(prufer\)序列長為\(n-2\),而每個位置有\(n\)種可能性,因此可能的\(prufer\)序列有\(n^{n-2}\)種。

    又由於\(prufer\)序列與無根樹一一對應,因此生成樹個數應與\(prufer\)序列種樹相同,即\(n^{n-2}\)

  • 對於給定度數為\(d_{1\sim n}\)的一棵無根樹共有\(\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}\)種情況

    由上面的性質可以知道,度數為\(d_i\)的節點會在\(prufer\)序列中出現\(d_i-1\)次。

    則就是要求出\(d_i-1\)\(i(1\le i\le n)\)的全排列個數。

    而上面那個式子就是可重全排列公式。(即全排列個數除以重復元素內部的全排列個數

大致就是這些。

例題

下面有兩道例題:【洛谷2290】[HNOI2004] 樹的計數【洛谷2624】[HNOI2008] 明明的煩惱

實際上,這兩道題都只用了由\(prufer\)序列所推導得到的結論,而沒有真正構造\(prufer\)序列,應該也不算特別好的例題。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM