LCA

树上倍增:链上信息维护
倍增:把链进行二进制分解,把每个长度为2的i次方的链的信息求出来,然后再累加

原理:任何一个数都可被二进制分解
操作:
1.调到相同的深度
2.若已重合,则y是x的祖先
3.若没重合,则一起向上跳:
枚举i从s到0,2s为小于到根的最大距离

p[x][i]:x号点向上走2i步能到的点

预处理p[x][i]:p[x][i]=p[p[x][i-1][i-1],因为2* 2i-1=2i,即走两次i-1就到i了
根节点的深度是 1,从根节点往下,每层深度都 +1,叶节点和叶节点深度可能不一样

性质:
如果两条路相交,深度深的lca一定在浅的路径上
在这里插入图片描述
查看一个点在一个路径上:
满足该点到路径两端点的距离等于两端点的距离
距离用lca和深度

dis(u,v):
设lca(u,v)=x;
dis(u,v)=dep(u)-dep(x)+dep(v)-dep(x)=dep(v)+dep(u)-2*dep(x);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值