版权声明:蒟蒻写的文章,能看就行了,同时欢迎大佬们指点错误 https://blog.csdn.net/Algor_pro_king_John/article/details/82859856
Problem
- 维护一个至多 节点的森林, 个操作,支持连边和查询两点 .
Data constraint
Solution
1. 离线做法
-
首先考虑比较简单的离线做法.
-
我们可以考虑先把最终的森林给构出来.
-
再每棵树上任意找一点 作为原始根,然后求个倍增数组.
-
然后扫一遍询问,并查集维护到每一个询问操作时,两个点 所在的树的真正根 .
-
那么答案其实就是拥有 两两 的最大深度的那个点.
-
具体证明可以分类讨论,这是一种很经典的套路.
-
其实这种套路在5783. 【省选模拟2018.8.8】树 这道题里也出现了,当时我乱搞搞出来了,但这一次却没有想到.
2.在线做法
-
为了使自己印象更深刻一些,下次遇到这种求LCA的题目能更灵活变通,我还打了一下在线做法.
-
不难发现离线做法的时间复杂度实际上就是找 的时间复杂度,这个可以在 时间内做到.
-
但如果强制在线,我们需要怎样做呢?
-
很容易想到的是启发式合并倍增数组.
-
但问题是合并后很有可能根会发生改变,也就是倍增的根与当前真正的根不一样.
-
显然,这就是上面离线所说的,需要做的3次LCA.
-
时间复杂度近似 ,实际上远远比这小.