5874. 【NOIP2018提高组模拟9.18】小p的决心(倍增LCA 离线 或 在线)

本文探讨了在大规模森林中进行高效查询与连边操作的方法,包括离线和在线两种处理策略。通过预处理倍增数组和并查集,实现快速定位两点间的最低公共祖先(LCA)。在线做法中,通过启发式合并倍增数组,即使在动态变化的森林中也能保持较低的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem

  • 维护一个至多 n n n节点的森林, Q Q Q个操作,支持连边和查询两点 L C A LCA LCA .

Data constraint

  • 1 ≤ N ≤ 100000 , 1 ≤ Q ≤ 100000 1\le N\le 100000,1\le Q\le 100000 1N1000001Q100000

Solution

1. 离线做法
  • 首先考虑比较简单的离线做法.

  • 我们可以考虑先把最终的森林给构出来.

  • 再每棵树上任意找一点 R t Rt Rt作为原始根,然后求个倍增数组.

  • 然后扫一遍询问,并查集维护到每一个询问操作时,两个点 u , v u,v u,v所在的树的真正根 r o o t root root.

  • 那么答案其实就是拥有 l , r , r o o t l,r,root l,r,root两两 L C A LCA LCA的最大深度的那个点.

  • 具体证明可以分类讨论,这是一种很经典的套路.

  • 其实这种套路在5783. 【省选模拟2018.8.8】树 这道题里也出现了,当时我乱搞搞出来了,但这一次却没有想到.

2.在线做法
  • 为了使自己印象更深刻一些,下次遇到这种求LCA的题目能更灵活变通,我还打了一下在线做法.

  • 不难发现离线做法的时间复杂度实际上就是找 L C A LCA LCA的时间复杂度,这个可以在 O ( n l o g n ) O(nlogn) O(nlogn)时间内做到.

  • 但如果强制在线,我们需要怎样做呢?

  • 很容易想到的是启发式合并倍增数组.

  • 但问题是合并后很有可能根会发生改变,也就是倍增的根与当前真正的根不一样.

  • 显然,这就是上面离线所说的,需要做的3次LCA.

  • 时间复杂度近似 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n),实际上远远比这小.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值