请问下面两段LCA有什么区别?
查看原帖
请问下面两段LCA有什么区别?
134066
Pethly_Cat楼主2022/2/7 15:08

RT.我在代码中使用第一段LCA只能得70分,而换上第二段便能AC:

void LCA(int x,int y){
	val1=val2=-1e18;
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=17;i>=0;i--)
		if(dep[f[i][x]]>=dep[y])
			x=f[i][x],update(x,i);
	if(x==y) return;
	for(int i=17;i>=0;i--)
		if(f[i][x]!=f[i][y]){
			x=f[i][x],y=f[i][y];
			update(x,i),update(y,i);
		}
	update(x,0),update(y,0);
}
void LCA(int x, int y){
	val1=val2=-1e18;
	if(dep[x]<dep[y]) swap(x,y);
	while(dep[x]>dep[y]){
		int i=(int)log2(dep[x]-dep[y]);
		update(x,i),x=f[i][x];
	}
	if(x==y) return;
	for(int i=(int)log2(dep[x]);i>=0;i--)
		if(f[i][x]!=f[i][y]){
			update(x,i),update(y,i);
			x=f[i][x];
			y=f[i][y];
		}
	update(x,0),update(y,0);
}
2022/2/7 15:08
加载中...