(本文同步发布于 博客园)
提供一个 C 题的做法。
考虑怎么把答案最大化。对于当前点 u ,我们可以选择一个子树进行处理,然后再选择 u 点本身,最后还可以再选一个子树处理。
我们对于每个点维护一个 multiset 表示当前节点进行处理可以增加序列的长度。每次搜索到一个点 u,我们把它所有子节点的 multiset 合并,取出最大的两个值 x,y,放入 x+y+1。
启发式合并即可维护。
(本文同步发布于 博客园)
提供一个 C 题的做法。
考虑怎么把答案最大化。对于当前点 u ,我们可以选择一个子树进行处理,然后再选择 u 点本身,最后还可以再选一个子树处理。
我们对于每个点维护一个 multiset 表示当前节点进行处理可以增加序列的长度。每次搜索到一个点 u,我们把它所有子节点的 multiset 合并,取出最大的两个值 x,y,放入 x+y+1。
启发式合并即可维护。