定义
Prufer数列是无根树的一种数列。在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2。它可以通过简单的迭代方法计算出来。它由Heinz Prufer于1918年在证明cayley定理时首次提出。
来自某度百科
阐释:
- prufer数列是一个编号序列(废话),对于一棵有n个节点的树,prufer编码长度为n-2,每一项是一个树上点的编号(可能有重复)
- 一棵树对应唯一 一个prufer数列,一个prufer数列也对应唯一 一棵树
树转prufer数列 & prufer数列转树
这个博客写的很详细 传送门
例题
明明的烦恼
本题相当于问根据给出的度数 有多少种prufer序列可以被生成
对于一个度数为x (x >= 2) 的点 显然它要在prufer序列里占x - 1个位置
于是这就变成了一道数学题
本题公式
a
n
s
=
(
n
−
2
s
u
m
)
s
u
m
!
∏
i
=
1
n
d
[
i
]
−
1
∗
(
n
−
c
n
t
)
n
−
2
−
s
u
m
ans = \tbinom{n - 2}{sum} \frac {sum!} {\prod \limits_{i = 1}^{n} d[i] - 1} * (n - cnt)^{n - 2 - sum}
ans=(sumn−2)i=1∏nd[i]−1sum!∗(n−cnt)n−2−sum
本题难点其实是高精度qvq