线段树合并 & DSU on tree

线段树合并 & Dsu on tree

CF600E

线段树合并,每个节点下维护子树下每个颜色的数量,建立权值线段树

复杂度证明:叶子节点 \(O(log m)\)

Dsu on tree 重儿子信息保留,轻儿子信息递归计算一次,合并一次。

复杂度证明:对于一个点,最多经过 \(O(\log n)\) 条轻边,第一次被递归执行一次,每次被当作轻儿子子树节点,都会被合并一次 \(O(轻边个数+1)\) 复杂度正确

思想

线段树合并基于动态开点,是把子树信息合并,实现的基础是 pushup 可以 \(O(1)\) 完成,一般还是联系到区间问题。

\(DSU\) 其实是一个相当暴力的算法,但是经过一些优化,竟然也可以达到正确的复杂度。

两种算法都可以解决树上统计信息的问题,互补互用,实际遇到问题的时候要权衡利弊

练习题

CF600E

Tree Rotations

雨天的尾巴

posted @ 2024-03-10 11:49  Reality_Creator  阅读(4)  评论(0编辑  收藏  举报