The Coding In OI
Prufer Code
Cayley定理: 对于一个 \(n\) 阶有标号完全图 \(K_n\),其有 \(n ^ {n - 2}\) 棵生成树。即 \(n\) 个结点有标号的无根树的数目为 \(n ^ {n - 2}\)。
由该定理可知,任意一棵 \(n\) 个结点有标号的无根树应与一个序列 \(P\) 对应,且该序列有 \(n - 2\) 项,\(P_i \in \{1, 2, \cdots , n\}\)。该序列称为 Prufer 序列,也称作 Prufer 编码。
对于一棵 \(n\) 个结点有标号的无根树 \(T\),其 Prufer 序列可以按如下方法构造:每次从 \(T\) 中移除当前标号最小的叶子,直到 \(T\) 中只剩下两个结点。那么第 \(i\) 次移除的叶子的相邻点的标号即为 Prufer 序列的第 \(i\) 项。

同理,对于一个 Prufer 序列 \(P\),可以按照如下方法还原出其表示的无根树 \(T\):设点集 \(V = \{1, 2, \cdots, n\}\),每次取出 \(V\) 中最小的未在当前 Prufer 序列中出现的元素 \(v\),令当前 \(P\) 的首项为 \(u\),那么添加边 \((u, v)\),然后将这两个元素分别删除。最后 \(V\) 中剩下两个结点,给它们连边即可得到无根树 \(T\)。

显而易见,Prufer 序列是无根树的一个双射,两者是一一对应的关系。
由 Prufer 序列的构造过程我们可以得到如下推论:
推论一: Prufer 序列中结点 \(i\) 出现的次数即为结点 \(i\) 的度数减一。
推论二: \(n\) 个结点的度数依次为 \(d_1, d_2, \cdots, d_n\) 的无根树的数目为:
\[\frac{(n - 2)!}{\prod\limits_{i = 1}^{n} (d_i - 1)!}
\]

浙公网安备 33010602011771号