求助倍增求LCA
查看原帖
求助倍增求LCA
327813
__lyh__楼主2021/7/4 12:02

半年多没碰OI,现在回归,找到了当时用倍增、树剖、RMQ、tarjan爆切无数次的LCA,结果......倍增挂了。

倍增代码:(数组代表什么应该显而易见吧)

int find_lca(int a,int b)
{
	int mi=24;
	while(1)
	{
		if(mi==-1) break; 
		int baba_a=baba[mi][a];
		if(deep[baba_a]<deep[b])
		{
			mi--;continue;
		}
		a=baba_a;
		mi--;
	}
	if(a==b) return a;
	mi=24;
	while(1)
	{
		if(mi==-1) break;
		int baba_a=baba[mi][a];
		int baba_b=baba[mi][b];
		if(baba_a==baba_b)
		{
			mi--;continue;
		}
		a=baba_a;
		b=baba_b;
		mi--;
	}
	return baba[0][a];
}

顺带吐槽一下,我把倍增改成暴力求LCA(一步一步地往上爬),居然直接过了这题......

退坑太久,实力真就下降好多

2021/7/4 12:02
加载中...