Skip to content

P14637 [NOIP2025] 树的价值 笔记 ​

48 pts ​

类似 P15454。

考虑一个点 u 不一定要立刻为 mex 做贡献,可以往上走到若干层后对祖先 fa 有 mex 贡献,即在 u 和 fa 这一段中,u 保持留空直到被 fa 使用。

设 fu,i,j 表示考虑点 u,当前的 mex=i,还有 j 个点未被使用的情况下,子树价值和最大值。

同样先考虑合并儿子,则有两种情况。

  • iu′ 继承 iu,那么有 fu,i,j1+j2′←fu,i,j1+maxi2<ifv,i2,j2,不能取等是因为取等会让 i′ 增加。
  • iu′ 继承 iv,那么有 fu,i,j1+j2′←maxi1<ifu,i1,j1+fv,i,j2。

一维是前缀 max,一维是树形背包,可以做到 O(n3)。

接着考虑加入 u 对答案的贡献,显然是 fu,i,j′←fu,i,j+i。

最后考虑使用垫脚石,即 fu,i+1,j−1′←max(fu,i+1,j−1′,fu,i,j+1)

时间复杂度 O(n3),空间复杂度 O(n3)。

76 pts ​

考虑转换贡献,什么时候一个垫脚石是有用的?

考虑 n3 的 DP 机制,相当于每个节点 u 选中一个儿子 v,继承其 mex 值,并在整个 u 子树内找垫脚石扩大自己的 mex。

接着,u 的若干个祖先会继续继承 u 的 mex 值,而 u 的其他儿子 v′ 的 mex 值在此时已经不再有用,也就是说垫脚石 x 发挥的作用是给链 1→x 中一段区间的 mex 值 +1。

由于每个点都选择一个儿子继承 mex,这相当于一个链剖分,根据贪心,一定让 x 贡献到 1→x 中最长的一段链上。

因此可以用状态记录链剖分的关键信息:设 fu,i,j 表示考虑 1→u 的最长连续链长是 i,u 当前所在链长是 j,子树内答案的最大值。

边界条件显然是对于叶子 u,fu,i,j=i。

考虑转移,u 选择的 v 继续延续这条链,别的新开一条链。

fu,i,j←i+maxv{fv,max(i,j+1),j+1+∑v′≠vfv′,i,1}

可以把 ∑v′≠v 拆到 max 的外面去变为 ∑v,然后 max 内再减去 fv,i,1。

答案即为 f1,1,1,时空复杂度 O(nm2)。

最近更新