LCA
LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。
倍增法(在线)
anc[i][j]表示第i个点的2^j的祖先的标号
整个过程就是两个点往上跳到同一深度,再一起往上跳找到LCA
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,root,anc[500009][21];
int edge_num,head[1000009],deep[500009];
struct E{
int to,next;
}edge[1000009];
inline void Swap(int &a,int &b){
int t=a;
a=b;b=t;
}
inline int Read(){
int x=0,flag=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') flag=-1;ch=getchar();}
while