【學習筆記】Prufer 序列

KingPowers發表於2024-03-13

樹的 Prufer 序列

Prufer 序列可以將一棵 \(n\) 個點的無根樹用一個長度為 \(n-2\) 的序列表示,且序列中的每個數都是 \([1,n]\) 之間的整數,它的作用在於可以將樹與數列建立一個一一對應的雙射關係,幫助解決一些有關樹的組合計數問題。

對於一棵 \(n\) 個結點的樹,其 Prufer 序列的構建過程如下:

  • 選擇當前編號最小的葉結點,將其刪除,並把它的父親加入到序列末尾。
  • 重複以上過程 \(n-2\) 輪,直到最後剩下兩個結點時停止。

用小根堆模擬上述過程即可做到 \(O(n\log n)\) 建立 Prufer 序列,當然也存線上性構建方法,但並沒有什麼用。

Prufer 序列的應用

因為 Prufer 序列與樹之間是雙射關係,因此可以用來對樹計數。

無向完全圖生成樹個數(Cayley 公式)

設該完全圖有 \(n\) 個結點,則其生成樹個數為 \(n^{n-2}\)

證明顯然,因為每棵生成樹都對應一個 Prufer 序列,等價於問長度為 \(n-2\) 的 Prufer 序列有幾種,而 Prufer 序列每個位置都能填 \([1,n]\) 之間的任意整數。

同時這個問題還有個等價描述:\(n\) 個點的無根樹個數。事實上改成有根樹答案只是變成了 \(n\times n^{n-2}=n^{n-1}\),因為每棵無根樹的 \(n\) 個點都能成為根。

給定度數的樹個數

不妨假設邊都是無向的,如果給定了 \(n\) 個點的度數 \(\deg_1,\deg_2,\deg_3,\ldots,\deg_n\),那麼滿足要求的樹的個數為:

\[\frac{(n-2)!}{\prod_{i=1}^n(\deg_i-1)!} \]

證明同樣是簡單的,觀察 Prufer 序列的構建過程可以得到一個性質:每個點在 Prufer 序列中一定恰好出現了 \(\deg_i-1\) 次,因此給定度數時 Prufer 序列的數字組成已經固定了,共有 \((n-2)!\) 種排列方式,但是每個點都有 \((\deg_i-1)!\) 種重複排列的方式,所以再除去即可。

廣義 Cayley 公式

發現這個許多文章並沒有記錄,但是它是真的有用。

\(n\) 個結點形成的有 \(k\) 棵樹的森林,要求給定的 \(k\) 個點中不存在兩個點在同一棵樹內的方案數為 \(k\times n^{n-k-1}\)

證明暫時先咕了。

圖聯通問題(Cayley 公式再擴充套件)

有一個 \(n\) 個點和若干條邊的無向圖,共有 \(k\) 個連通塊,大小分別為 \(s_1,s_2,\ldots,s_k\),現在要加 \(k-1\) 條邊使得整個圖聯通,則方案數為 \(n^{k-2}\prod_{i=1}^ks_i\)

證明不會,似乎可以用 Matrix-Tree 或多元二項式定理證。

相關文章