LCA
才看了Lca记录下学习笔记,稍后会写一些题来巩固所学的知识。
LCA有两种求的方法
-
使用 o ( n ) o(n) o(n)的向上标记法。
-
倍增求解
1.fa数组fa[i][j]表示以i开始向上跳 2 j 2^j 2j步达到的节点。 0 < = j < = l o g ( n ) 0<=j<=log(n) 0<=j<=log(n)
2,depth数组depth[i]表示节点i的深度
3,我们可以设置哨兵数组来防止出界的情况。- 步骤(倍增):
1,先将两个点同时间跳到同一层。(使用二进制拼凑的方法)
2,两个点一起向上跳。一直跳到他们公共祖先的下一层。
预处理 n ∗ l o g n n*logn n∗logn
查询 l o g n logn logn
- 步骤(倍增):
3,tarjan——离线求LCA O(m+n)
深度有限搜索的时候将点分成三大类。
[1]已经遍历过的点并且已经回溯过的点
[2]正在搜索的分支
[3]还未搜索的点