Ural Tree

LCA的应用,LCA的伪代码:

void LCA(u)
{
s[u]=u; //初始化并差集
for(u的每个儿子v)
{
LCA(v);
s[v]=FIND(u);
}
color[u]=black;
for(Q(u)中的所有元素v)  //如果存在询问LCA(u,v),就把v存在集合Q(u)里
if(color[v]==black) LCA(u,v)为FIND(u)
}

LCA问题的一个应用是求树上两点间距离。
只需计算出根到每个点的距离dis[],求出两点u,v的最近公共祖先lca(u,v),那么u,v两点间距离=dis[u]+dis[v]-2*dis[lca(u,v)]。

然后,对于这类求距离的问题,我凸眼土土的发现,对于一棵树来讲,其实任意一点都可以作为这个树的根。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值