其他分享
首页 > 其他分享> > LCA 2

LCA 2

作者:互联网

主要内容是LCA的板子

1.倍增LCA

原理:尝试法,二进制划分和倍增

打法:

1.首先预处理每个节点在整棵树中的深度和关键信息

2.对于节点x,预处理每个2的j次方所能到达的点,这里递归变递推

3.询问lca的时候,首先调整节点的深度,较深的节点走到与较浅节点同深度位置

4.如果y走到x的位置,那么返回x即可,否则尝试同时向上走2的j次方步数

4.1.如果在尝试过程中相遇了,那必定是公共祖先,但可能不是LCA所以不走

4.2 如果没有相遇那就直接向上走即可

5.走完这些步以后必然还差一步相会,所以返回x父节点即可

2.离线LCA

感谢Tarjan

基本原理:使用并查集实现对暴力的优化

实现原理:

在DFS执行的任一阶段,可将节点分为3类:

1.访问完毕,向上回溯的2类节点

2.正在访问该节点未向上回溯的1类节点

3.未访问的0类节点

对于1类节点来说,以它为根的子树上的任意不同的2类节点,其根节点就是这个1类节点

使用并查集优化,当某个节点完成访问成为2类节点时,接下来回去的是父节点,但是父节点在回溯时是1类节点,因此可以将2类节点合并到1类节点中

标签:查集,访问,回溯,向上,节点,LCA
来源: https://www.cnblogs.com/22222222STL/p/16156673.html