AcWing1172 祖孙询问(倍增法求lca模板)
注意点: 要倒序,否则无法刚好二进制拼凑 设置哨兵,0的深度为0,且超过树的根节点的值为=0 #include<iostream> #include<queue> #include<map> #include<vector> #include<cstdio> #include<algorithm> #include<stack> #include<cstring> using namespace std; typedef long long ll; const int N=5e5+10; const int inf=0x3f3f3f3f; int root; int idx,h[N],e[N],ne[N]; int fa[N][16]; int depth[N]; void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++; } void bfs(int root){ queue<int> q; memset(depth,0x3f,sizeof depth); depth[0]=0,depth[root]=1; q.push(root); while(q.size()){ int t=q.front(); q.pop(); int i; for(i=h[t];i!=-1;i=ne[i]){ int j=e[i]; if(depth