(本文同步发布于 博客园

提供一个 C 题的做法。

考虑怎么把答案最大化。对于当前点 uuu ,我们可以选择一个子树进行处理,然后再选择 uuu 点本身,最后还可以再选一个子树处理。

我们对于每个点维护一个 multiset 表示当前节点进行处理可以增加序列的长度。每次搜索到一个点 uuu,我们把它所有子节点的 multiset 合并,取出最大的两个值 x,yx,yx,y,放入 x+y+1x+y+1x+y+1

启发式合并即可维护。