题目是说,给出一棵树上的若干条路径,每个路径有一个权值,要求选出若干条不相交的路径,使权值和最大。
做法是,令 fi 表示以 i 为根的子树里的所有路径中选择的最大权值和。每次考虑要么没有任何路径经过 i,要么对于以 i 为 LCA 的路径,选择相当于删除这条路径上所有的点,整个子树被拆成一个森林,统计这些森林的答案再加上这次选择路径的权值即可。
这个做法的瓶颈是上面说的每次选择一条路径之后“删点”的过程。时间复杂度是 O(nm) 的。似乎是可以通过 DFS 序+树状数组优化到 O(n+mlogn)。
不是很懂具体是怎么优化的,求大佬教教/kel