1. 程式人生 > >Prufer 序列

Prufer 序列

計數 begin 滿足 葉子節點 不能 次數 times 邊界 葉子

  給 $n$ 個帶標號點的無根樹,可以構造 Prufer 序列:每次找標號最小的葉子,將與其相鄰的結點加入 Prufer 序列中,然後將這個葉子節點刪去,直到這棵樹只有 $2$ 個節點。

  嘗試對一個長度為 $n-2$ 、每一項在 $1$ 到 $n$ 之間的 Prufer 序列 $Q$ ,求出它對應的無根樹:從小到大依次掃描 Prufer 序列的第 $x$ 項,那麽在 $x$ 之後沒有出現、且沒有被刪除的點一定是葉子節點,於是找到最小的滿足條件的點,將這個點與 $Q_x$ 連邊;最後還剩下了兩個沒有被刪除的節點,將它們連邊。

  長度為 $n-2$ 、每一項在 $1$ 到 $n$ 之間的 Prufer 序列與 $n$ 個點的無根樹一一對應,只需要證明對於任意的 $x \in [0, n-2)$ ,掃描到 Prufer 序列的第 $x+1$ 項時,能夠找到一個在 $x$ 之後沒有出現、且沒有被刪除的點。這時候一共有 $n - x$ 個點可以被選擇,且由 Prufer 序列知有至多 $n - 2 - x$ 個點不能夠被選擇,所以一定至少有 $2$ 個葉子節點可以被選擇,所以得證。

  綜上,長度為 $n-2$ 、每一項在 $1$ 到 $n$ 之間的 Prufer 序列與 $n$ 個點的無根樹一一對應。

  Prufer 序列的一個經典應用是證明 Caley 公式:$n$ 個點的帶標號無根樹的個數為 $n ^ {n - 2}$ 。

  如果要對有根樹個數進行計數,那麽只需要枚舉根,而根一共有 $n$ 個,所以 $n$ 個點的帶標號有根樹個數為 $n ^ {n - 1}$ 。

  限制每個點的度數恰好為 $d_1, d_2, ..., d_n$ ,如何計算這 $n$ 個點構建的滿足度數限制的無根樹個數?

  在 Prufer 序列中,第 $i$ 個點出現的次數為 $d_i - 1$ ,所以樹的個數為 $\begin{aligned} \binom{n - 2}{d_1 - 1, d_2 - 1, ..., d_n - 1} \end{aligned}$ 。

  限制每個點的度數不超過 $d_1, d_2, ..., d_n$ ,如何計算這 $n$ 個點構建的滿足度數限制的無根樹個數?

  考慮一個流程,構建所有合法的 Prufer 序列:從 $1$ 到 $n$ 依次進行,每次將不超過 $d_i - 1$ 個 $i$ 插入 Prufer 序列中,且滿足總長度不超過 $n-2$ 。

  用 DP 套上這個流程,設 $f[i][j]$ 表示考慮了前 $i$ 個數,序列的總長度為 $j$ 的方案數。邊界為 $f[0][0] = 1$ ,答案為 $f[n][n - 2]$ 。轉移:$\begin{aligned} f[i][j] = \sum_{k \le d_i - 1} \binom{j}{k} f[i-1][j - k] \end{aligned}$ 。

  將 Prufer 序列推廣到有根樹。

  給一棵 $n$ 個帶標號節點的有根樹,可以構造出 有根樹 Prufer 序列:每次找標號最小的葉子,將與其相鄰的結點加入 Prufer 序列中,然後將這個葉子節點刪去。

  給一個長度為 $n-1$ 、前 $n-2$ 項在 $1$ 到 $n$ 、最後一項為根的有根樹 Prufer 序列,求出它對應的有根樹:從小到大依次掃描 Prufer 序列的第 $x$ 項,那麽除根以外、在 $x$ 之後沒有出現、且沒有被刪除的點一定是葉子節點,於是找到最小的滿足條件的點,然後將 $Q_x$ 向這個點連有向邊。

  長度為 $n-1$ 、前 $n-2$ 項在 $1$ 到 $n$ 、最後一項為根的有根樹 Prufer 序列與 $n$ 個點的有根樹一一對應,只需要證明對於任意的 $x \in [0, n-1)$ ,掃描到 Prufer 序列的第 $x+1$ 項時,能夠找到一個除根以外、在 $x$ 之後沒有出現、且沒有被刪除的點。這時候一共有 $n - 1 - x$ 個點可以選擇,且由 Prufer 序列知有至多 $n - 1 - x$ 個點不能夠被選擇,註意到 Prufer 序列中包含了根,所以至多有 $n - 2 - x$ 個除根以外的點不能夠被選擇,所以至少存在 $1$ 個點可以被選擇,所以得證。

  綜上,長度為 $n-1$ 、前 $n-2$ 項在 $1$ 到 $n$ 、最後一項為根的有根樹 Prufer 序列與 $n$ 個點的有根樹一一對應。

  如果要求對有根樹計數,也可以從有根樹 Prufer 序列的角度進行理解。

  將 Prufer 序列推廣到有根樹構成的森林(簡稱有根森林)。

  給 $K$ 棵共有 $n$ 個帶標號節點的有根樹,類似地,可以構造出長度為 $n-K$ 、前 $n-K-1$ 項在 $1$ 到 $n$ 、最後一項為某個根節點的有根森林 Prufer 序列

  給長度為 $n-K$ 、前 $n-K-1$ 項在 $1$ 到 $n$ 、最後一項為某個根節點的有根森林 Prufer 序列,類似地,求出它的對應有根森林。

  長度為$n-K$ 、前 $n-K-1$ 項在 $1$ 到 $n$ 、最後一項為某個根節點的有根森林 Prufer 序列與 $n$ 個點的有根樹一一對應,只需要證明對於任意的 $x \in [0, n-K)$ ,掃描到有根森林 Prufer 序列的第 $x+1$ 項時,能夠找到一個除根以外、在 $x$ 之後沒有出現、且沒有被刪除的點。這時候一共有 $n-K-x$ 個點可以選擇,且由 Prufer 序列知有至多 $n - K - x$ 個點不能夠選擇,註意到 Prufer 序列中包含了根,所以至多有 $n - K - 1 - x$ 個除根以外的點不能夠被選擇,所以至少存在 $1$ 個點可以被選擇,所以得證。

  綜上,長度為$n-K$ 、前 $n-K-1$ 項在 $1$ 到 $n$ 、最後一項為某個根節點的有根森林 Prufer 序列與 $n$ 個點的有根樹一一對應。

  如果要計算把 $n$ 個帶標號點劃分到 $K$ 個有根森林的方案數,就先欽定 $K$ 個根,然後枚舉 Prufer 序列,所以方案數為 $\binom{n}{K} n ^ {n - K - 1} K$ 。

  $n$ 個帶標號點的基環樹計數。

  枚舉環上的點數 $K$ ,環排列乘上劃分到 $K$ 個有根森林進行計數。

  $\begin{aligned} ans_n & = \sum_{K = 3} ^ n \binom{n}{K} n ^ {n - K - 1} K \times (k-1)! \\ & = \frac{n!}{2} \sum_{K = 3} ^ n \frac{n ^ {n - K - 1}}{(n - K)!} \end{aligned}$

  可以線性求出 $ans[]$ 的某一項。

Prufer 序列