虽然做过类似的题,但是比较有趣的说(
首先应该能考虑到把每棵树划分成链,再拼成回路。
首先需要求 fi(n) 表示第 i 棵树划分为 n 条链的方案数。
这个可以用一个提高水平的树形 DP 解决:设 gu,i,0/1/2 表示 u 的子树内,已经确定形态的有 i 条链,u 所属的链还有 0/1/2 个端点没有确定(即可以连接其他的链)。
转移并不难。但考虑到对于点数大于 1 的链,都有正反两种方案,这是应当在转移时特殊处理的。
得到这个之后,因为划分的链拼成回路的过程中不能有相邻的链来自同一棵树,所以可以考虑容斥。
对于第 i 棵树,考虑构造 EGF Fi(x)=k∑j=1xjj!k∑u=j(−1)u−j(u−1j−1)u!fi(u)
然后将 EGF 暴力乘起来即可。
复杂度 O(∑k2i)。
代码:
1 |
|