lca模板 c++

it2026-09-29  8

求树上的两个点的最小公共祖先的算法。

void fill() { for(int i=1;i<=29;i++) for(int j=1;j<=n;j++) f[j][i]=f[f[j][i-1]][i-1]; //f[i][j]表示i往上跳2^j层 } int lca(int x,int y) { if(depth[x]<depth[y]) swap(x,y); for(int i=29;i>=0;i--) if(depth[f[x][i]]>=depth[y]) x=f[x][i]; if(x==y)return x; for(int i=29;i>=0;i--) if(f[x][i]!=f[y][i]) { x=f[x][i],y=f[y][i]; } return f[x][0]; }

谢谢阅读

最新回复(0)