$Dsu$ $on$ $Tree$ 复习

\(Dsu\) \(on\) \(Tree\) 复习

发现最近有点头晕,突然这东西就不会了,头疼了很久,决定写一份记录啊。

大致认识

适用范围一般在处理树上子树统计问题,不支持在线回答询问以及修改。

最裸的复杂度是\(nlogn\),它优秀的复杂度基于树链剖分,所以学习这东西之前首先得掌握树链剖分的相关知识。

主要的算法思想为优化大暴力,即对于每个点都向下\(Dfs\),考虑如何优化,可以发现一个点被重复统计了多次,并且,每次\(Dfs\)的结果都直接删除了而没有能被很好地利用。

在对一棵树进行树链剖分之后,利用重链剖分优秀的性质对上面的暴力进行优化,我们考虑每个点继承自己重儿子的答案,而在轻重链转换的时候暴力转移,如果对于一个元素的一次转移是\(O(1)\)的,那么这个算法就可以达到\(nlogn\)的优秀复杂度。

具体证明按照树链剖分的那一套,一个点向上跳重链,只会经过最多\(logn\)次轻重链的转换,这样以来,每个元素被统计的次数就是\(O(logn)\)的,而若一次统计的复杂度是\(O(1)\),则整个算法的复杂度就可以达到上文所说的那个优秀复杂度。

题目

感觉差不多就这样就结束了啊。

摆俩题吧,其实也是别人博客推荐的,可以自己去搜搜,第一个那个博客挺好的。

两个模板题 \(CF600E\) \(CF741D\)


就这样啦。

猜你喜欢

转载自www.cnblogs.com/Lovemona/p/9839109.html