首页 > 其他分享 >倍增求 LCA

倍增求 LCA

时间:2024-09-30 12:49:53浏览次数:9  
标签:祖先 LCA 节点 深度 倍增 预处理

1. 树上倍增——倍增求 LCA

        LCA 指的是最近的公共祖先,倍增法求解 LCA 的步骤如下。

(1)预处理

        a. 求深度:对于每个节点 dfs 预处理处节点深度;

        b.  求倍增祖先:计算出每个节点向父元素跳 2^{0},2^{1},2^{2},...,2^{k} 步所到达的节点(在这里 2^{k} 大于整棵树的最大深度)

        备注:

        a. 设 f [ x ,  k ] 表示节点 x 向上跳 2^{k} 步能到达的祖先, f [ x ,  0 ] 表示 x 的父元素,如对应节点不存在 f [ x ,  k ] = 0。

        b. 将路径长度 2^{k} 分为两半,x 跳 2^{k} 次到的祖先 = x 跳 2^{k-1} 次到的祖先再跳 2^{k-1} 次。

        因此可得: f [ x ,  k ] = f [ f [ x ] [ k-1 ] , k-1 ]。

        c. 有 n 个节点,每个节点能向上跳的最大次数为 log_{N} ,因此预处理的时间复杂度为 n*log_{n}

(2)查询

        对于多次查询节点 x 和 y 的公共祖先:

        a. 如果 x 的深度 < y 的深度,则交换 x y,使得 x 更深;

        b. 采用二进制拆分的思想,根据两个节点的深度差,让 x 快速跳转到和 y 一样深;

        c. 如果此时 x==y,可得 LCA;

        d. 如果不相等,采用二进制拆分的思想,让 x y 倍增上跳,直到 x 的父相遇(因为跳出根以上, f [ x ] [ y ] = 0,因此如果让 x 和 y 相遇,可能结果为 0 ),可得 LCA;

        备注:单词查询的时间复杂度为 log_{N}

标签:祖先,LCA,节点,深度,倍增,预处理
From: https://blog.csdn.net/Ryan_hsMax/article/details/142654112

相关文章

  • 倍增
    倍增-总结序列前2题题意:https://blog.csdn.net/weixin_52536621/article/details/127104830区间分段考虑进行预处理每个数如果只能有一段到达的位置,再进行倍增,最后倍增跳跃即可。最优贸易简化版预处理每个点向后走\(2^j\)不的最小买入价格、最大卖出价格、最大收益。天才......
  • Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力
    本文分享自华为云社区《Volcanov1.10.0版本正式发布!10大功能全面提升统一调度和细粒度资源管理能力》,作者:云容器大未来 近日,Volcano社区v1.10.0版本[1]正式发布(Branch:release-1.10[2]),此次版本增加了以下新特性:新增队列优先级设置策略支持细粒度的GPU资源共享与回收支持Po......
  • 洛谷题单指南-分治与倍增-P4155 [SCOI2015] 国旗计划
    原题链接:https://www.luogu.com.cn/problem/P4155题意解读:在m个点的环上,有n个区间,且各个区间之间没有包含关系,计算从每个区间开始,最少要多少个区间能覆盖环上所有m个点。解题思路:本质上是一个区间覆盖问题!1、破环成链由于题目中是一个环,对于环的问题,在区间DP中介绍过,经典处理......
  • 洛谷题单指南-分治与倍增-P3517 [POI2011] WYK-Plot
    原题链接:https://www.luogu.com.cn/problem/P3517题意解读:有n个连续的点p1,p2,...,pn,将这n个点分成不超过m堆,每堆点连续,每一堆都缩成一个点qi,要使得原来的点p1~ps距离qi的最大值最小(最相似),求这个相似度,并计算一共分成几堆,以及每堆缩到的点qi的坐标。解题思路:要使得若干点缩到一......
  • 智能同步,效率倍增:Ftrans文件自动化实时同步技术革新!
    随着企业结构分散化,企业内部数据流转更加频繁,为了保证数据在不同平台和设备之间的一致性和可用性、保障数据的安全性并有效支撑业务开展,越来越多的企业需要将内部数据在多个数据中心之间、多台服务器之间、多云和本地间进行服务器文件自动化实时同步处理。通过同步软件,企业能够更......
  • DFS序求LCA
    DFS序求LCA介绍欧拉序求LCA的数组总是会忘记开两倍,并且预处理的常数较大。用DFS序求LCA可以解决这些问题。欧拉序:进节点和出节点会重复记录节点。DFS序:深度优先搜索的顺序,不会重新记录。假设要求\(lca(u,v)\),且\(dfn[u]<dfn[v]\)。那么\(dfn[u]\simdfn[v]\)的......
  • 洛谷题单指南-分治与倍增-P3509 [POI2010] ZAB-Frog
    原题链接:https://www.luogu.com.cn/problem/P3509题意解读:n个点,每个点上有一只青蛙每次跳到距离自己第k近的点,m次之后跳到哪个点。解题思路:1、计算距离每个点第k近的点,存入ne[N]给定一个点i,距离i第k近的点一定在长度为k+1个点的窗口内,窗口包括i并且,第k近的点只能是左端点或者......
  • 【Unity】CinemachineVirtualCamera:实现第一人称视角控制
    相机视角的控制,利用CinemachineVirtualCamera插件(在packageManager中下载)实现键盘和鼠标控制第一人称视角。WASD前进后退向左向右,QE左右旋转;鼠标滚轮控制远近、俯仰和升降。另外还支持鼠标靠近边缘移动、鼠标拖拽等控制方式。成果展示Scene部分主相机增加CinemachineBrain组......
  • 树上差分+lca 黑暗的锁链
    //**太久不写了,感觉很难受。。。比赛最近打得也不好,课内任务又重,还要忙着做项目。何去何从。今天又写了一题,用了树上差分的知识。下面来整理整理。1.首先让我们学一下lca(最小公共父节点) 我用的是倍增来求的。总共其实就是两步:dfs打ST表预处理每个点的上面节点 lca求两......
  • 【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学
    您的学术研究值得被更多人看到!在这里,我为您提供精准的会议推荐,包括水利土木工程、计算机科学、地球科学、机械自动化、材料与制造技术、经管金融、人文社科等主流学科相关领域的国际会议。快速的稿件录用和高效的检索服务将确保您的研究成果迅速传播。关注我,寻找与您研究......