Examples

P8329 [ZJOI2022] 树 解题报告

P8329 [ZJOI2022] 树 解题报告:

更好的阅读体验

题意

生成两棵 \(n\) 个结点的有根树 \(S,T\),其中 \(S\) 内要求父亲编号小于儿子编号,\(T\) 内要求儿子编号小于父亲编号,求两棵树叶子节点(不包括根)互补的方案数。对于 \(n\in[2,N]\) 求出答案。

\(1\leqslant N\leqslant 500\)

分析

我的计数力还不高啊/ll。

枚举第一棵树的叶子集合,第二棵树的叶子集合为恰好,容斥成钦定:(\(f_1(S)\) 为第一棵树叶子集合为 \(S\) 的方案数,\(f_2(S)\) 为第二棵树非叶子集合\(S\) 的方案数)

\[\sum_Sf_1(S)\sum_{T}(-1)^{|S|-|T|}f_2(T)=\sum_S(-1)^{|S|}f_1(S)\sum_{T}(-1)^{|T|}f_2(T) \]

考虑对这个式子直接 dp,令 \(f_{k,i,j}\) 表示 dp 到了编号 \(k\) 的结点,目前前面钦定了 \(i\) 个非叶子结点,后面提前钦定了 \(j\) 个非叶子节点的容斥系数和。

分讨列出转移方程,大概就是枚举结点分配给哪棵树,然后再确定另一棵树是否钦定它来容斥(很神秘):

  • 这个结点分配为第一棵树的叶子,第二棵树钦定:\(f_{k+1,x,y}\leftarrow -xyf_{k,x,y}\)
  • 这个结点分配为第一棵树的叶子,第二棵树不钦定:\(f_{k+1,x,y}\leftarrow xyf_{k,x,y+1}\)
  • 这个结点分配为第二棵树的叶子,第一棵树钦定:\(f_{k+1,x,y}\leftarrow -xyf_{k,x,y}\)
  • 这个结点分配为第二棵树的叶子,第一棵树不钦定:\(f_{k+1,x+1,y}\leftarrow xyf_{k,x,y}\)

复杂度 \(O(n^3)\)

代码

数据出了就补。

posted @ 2022-05-04 11:28  xiaoziyao  阅读(144)  评论(2编辑  收藏  举报