Loading

树形背包上下界优化复杂度证明

众所周知,一般的树形背包复杂度为 \(O(n^2)\),而限制背包上界为 \(k\) 的树形背包复杂度为 \(O(nk)\)。下面给出证明。

对于一般树形背包复杂度为 \(O(n^2)\) 的证明

考虑每个点对只会在 lca 处被统计一次,复杂度显然为 \(O(n^2)\)

对于限定上界为 \(k\) 树形背包复杂度为 \(O(nk)\) 的证明

考虑每个点 \(x\) 向上合并的过程,在 \(x\) 所在集合大小没超过 \(k\) 之前,显然最多统计 \(O(k)\) 次,对于所有点则是 \(O(nk)\) 次;在集合大小超过 \(k\) 之后,每次加入一个点必然会永久弹出一个点,并付出 \(O(k)\) 的额外代价,而由于每个点最多被弹出一次,额外代价也最多是 \(O(nk)\) 的,所以总复杂度显然为 \(O(nk)\)

posted @ 2023-10-19 14:25  Hypercube07  阅读(37)  评论(0)    收藏  举报