UNR #5 提问系统

发布时间 2023-07-13 16:21:10作者: PYD1

用栈思考稍显困难,不难发现我们可以建出一棵树出来,相当于对树进行二染色,对从根到任何点的路径上颜色数有要求,然后求愤怒值总和。

考虑一个简单的 DP,我们设 \(f_{u,p,x}\) 表示考虑点 \(u\) 内的子树,点 \(u\) 到根的路径上有 \(p\) 个 R,子树内一共有 \(x\) 个 R,每次合并。在根处稍微特殊处理就可以得到答案。这是 \(O(k^3)\)

接下来我们有若干个优化方向:

  • 放弃统计方案数,改成统计 \(\sum x^3,\sum x^2,\sum x\)
  • 坚持统计方案数,考虑优化 DP 的状态。(容斥?类似期望?)
  • 考虑证明上面的 DP 复杂度是对的(显然是错的)。

然而我一个都不会。

我们考虑单纯记 DP 方案数太傻了,肯定要记答案。答案可以表示成从整棵树当中任选一个 R 和两个 B 的方案数,这个可以记 \(dp_{u,p,0/1,0/1,0/1}\) 来转移。复杂度 \(O(k^2)\)

这个思路跟 ARC163 D 有点像。