警示后人
查看原帖
警示后人
1176197
ljcnoi楼主2024/9/26 21:54

如果你刚学树链剖分求LCA,请记住swap一定要写在while里面,不然会死循环,把你T飞!

错误演示:

int lca(int x,int y)
{
	if(deep[topp[x]]<deep[topp[y]])
	{
		swap(x,y);
	}
	while(topp[x]!=topp[y])
	{
		x=topp[x];
		x=f[x];
	}
	return deep[x]<deep[y]?x:y;
}

正确演示:

int lca(int x,int y)
{
	while(topp[x]!=topp[y])
	{
		if(deep[topp[x]]<deep[topp[y]])
		{
			swap(x,y);
		}
		x=topp[x];
		x=f[x];
	}
	return deep[x]<deep[y]?x:y;
}
2024/9/26 21:54
加载中...