首页 > 其他 > 详细

最近公告祖先 (LCA)

时间:2020-07-23 22:47:15      阅读:89      评论:0      收藏:0      [点我收藏+]

最近公共祖先LCA

int LCA(int x,int y)
{
	if(dep[x]<dep[y])
		swap(x,y);
	int d=dep[x]-dep[y];
	for(int p=0,k=1;p<k;p++,k<<=1)
		if(d&k)
			x=f[p][x];
	if(x==y)
		return x;
	for(int i=k-1;i>=0;i--)
	{
		if(f[i][x]==f[i][y])
			continue;
		x=f[i][x];
		y=f[i][y];
	}
	return f[0][x];
}

int main()
{
	for(int j=1;j<k;j++)
		for(int i=1;i<=n;i++)
			f[j][i]=f[j-1][f[j-1][i]];//f[j][i]表示从点i向上跳2^j步 
}

题目推荐
1.P3379【模板】最近公共祖先(LCA)

2.P4281 AHOI2008 紧急集合/聚会

最近公告祖先 (LCA)

原文:https://www.cnblogs.com/liumengliang/p/13368442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!