社区讨论

求解倍增求LCA的常数优化

学术版参与者 12已保存回复 15

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@mi7chcw8
此快照首次捕获于
2025/11/20 19:25
4 个月前
此快照最后确认于
2025/11/20 20:30
4 个月前
查看原帖
RT,这是求LCA过程
CPP
int lca(int x,int y){
    if(dep[x]<dep[y]) swap(x,y);
    while(dep[x]>dep[y]){
        x=fa[x][lg[dep[x]-dep[y]]-1];//lg数组是log2()
    }
    if(x==y) return x;
    for(int i=lg[dep[x]]-1;i>=0;i--){
        if(fa[x][i]!=fa[y][i]){
            x=fa[x][i];y=fa[y][i];
        }
    }
    return fa[x][0];
}
预处理lg数组如下:
CPP
for(int i=1;i<=n;i++)
    	lg[i]=lg[i-1]+(1<<lg[i-1]==i);
蒟蒻求解这个求lg[]lg[]的过程是如何实现的,以及(1<<lg[i1]==i)(1<<lg[i-1]==i)的含义是什么?

回复

15 条回复,欢迎继续交流。

正在加载回复...