树形背包上下界优化复杂度证明
众所周知,一般的树形背包复杂度为 \(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)\)。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号