A. 树与路径
首先考虑一个dp的方法,对于这种链划分的题目,有一个很重要的思想就是按照每个点的角度考虑,实际上链划分就是匹配问题,每个点只能出一条边和入一条边,所以我们拆点之后就是匹配,这也是网络流最少链覆盖的思路。
这道题是在树上那么就有更好的性质,实际上对于每个点的状态就是将所连接的边进行匹配,并且每个点的状态是独立的,所以我们可以考虑一个暴力的dp,
d
p
i
,
j
dp_{i,j}
dpi,j表示的是i这个点包含父亲边划分为j条链的方案数,然后可以得到转移如果没有链经过i,那么直接相乘,否则假设有k条链经过,则需要乘上一个系数
(
2
k
d
u
i
)
(
2
k
−
1
)
!
!
\binom{2k}{du_i}(2k-1)!!
(dui2k)(2k−1)!!
意义为选择2k个点进行匹配,然后2n个点的完美匹配个数为(2n-1)!!,这是一个经典结论,具体可以通过枚举1号点的匹配递推出来。
f
n
=
(
n
−
1
)
f
n
−
2
f_n=(n-1)f_{n-2}
fn=(n−1)fn−2
然后由于整个问题每个点都是独立的,并且可以看出这也是一个背包问题,所以我们可以利用多项式求解。直接在将上面的系数看作是关于k的多项式,然后乘起来最终的系数就是答案。