lca集锦

1.求树上两点距离
dis(a,b)=dis(a,root)+dis(b,root)-2*dis(lca(a,b),root)

2.求树上到达三点距离之和最小的点(重复路径重复计算)
t=lca(a,b)^lca(b,c)^lca(c,a)
ans=d(t,a)+d(t,b)+d(t,c)
注:到达树上三点距离之和的点只有一个。证明如下:
先考虑其中两点,如果另一点在该连线上,那么答案只有该点,如果不再该连线上,那么答案就是另一点到达该线最短距离的交点,也只有一点。

3.求树上三点相连后的最短距离(与2不同,重复路径计算一次即可)
ans=(dis(a,b)+dis(b,c)+dis(c,a))/2

4.寻找树上到x点距离严格小于到达y和z点距离的点的总数
1)求 <x,y> <script type="math/tex" id="MathJax-Element-7"> </script>和 <x,z> <script type="math/tex" id="MathJax-Element-8"> </script>的中点z1,z2
2)讨论z1,z2和x的位置关系求解

5.求在一颗树上填边后桥的数量。
未添边时,桥为n-1,添边后桥的数量减少该两点树中路径长度的数量,但是可能出现重叠的情况因此需要记录当前点是否已经属于某个非桥环。
所以每条边最多遍历一次,总复杂度不超过O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值