首页 > 其他分享 >DFS 序求 LCA

DFS 序求 LCA

时间:2023-03-06 10:58:39浏览次数:41  
标签:序上 整棵树 序求 DFS dfn LCA mathcal

很冷门的科技,但是有着显著的使用效果(减少建立虚树的常数)。

本文学习自:Alex_Wei 的博客

首先遍历一遍整棵树,可以得到整棵树的 DFS 序和每个点的时间戳(记为 \(dfn\) )。

考虑两个点 \(u,v\) ,求这两个点的 LCA 。不妨设 \(dfn_u<dfn_v\) 。

  • 若 \(u\) 不是两个点的 LCA。考虑 DFS 序的过程,从根开始,先到 LCA ,然后到 \(u\) 所属的子树,回溯到 LCA ,最后到 \(v\) 所属的子树。可以看出,DFS 序上 \([dfn_u,dfn_v]\) 之间是没有深度小于等于 LCA 的点的,而且所有点都在 \(u\rightarrow v\) 的路径上。所以我们可以尝试去找 DFS 序上 \([dfn_u,dfn _v]\) 之间的深度最小的点,这个点一定是 LCA 的某一个儿子。那么 LCA 也就可以求出来了。
  • 若 \(u\) 就是 LCA ,显然有很多种做法来求,但是我们为了统一和美观,我们其实考虑 DFS 序上 \([dfn_u+1,dfn_v]\) 这段区间即可。这样子问题就转化为了上一种情况。
  • 唯一需要特判的情况就是 \(u=v\) 的情况。

上面的过程只需要一个 \(\rm ST\) 表即可。复杂度为 \(\mathcal O(n\log n)-\mathcal O(1)\)

P3379 代码

标签:序上,整棵树,序求,DFS,dfn,LCA,mathcal
From: https://www.cnblogs.com/Vitheon/p/17182924.html

相关文章

  • 【DFS】LeetCode 78. 子集
    题目链接78.子集思路求子集问题和77.组合(opensnewwindow)和131.分割回文串(opensnewwindow)又不一样了。如果把子集问题、组合问题、分割问题都抽象为一......
  • 【DFS】LeetCode 216. 组合总和 III
    题目链接216.组合总和III思路与【DFS】LeetCode40.组合总和II思路一致,只不过candidates数组在题目中明确说明了只有1到9。代码classSolution{private......
  • C++ 深度优先搜索(DFS) 讲解
    目录DFS初步概念DFS例题-迷宫游戏题目描述输入输出格式输入输出样例输入#1输出#1输入#2输出#2解题思路代码DFS初步概念DFS是一种深度搜索算法,它的特点是"不撞南墙不回头"......
  • dfs+hash
    题目:给定一个n×m的二维矩阵,其中的每个元素都是一个[1,9]之间的正整数。从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。走了k......
  • mac系统上hdfs java api的简单使用
    1、背景在上一节中,我们简单学习了在命令行上如何操作hdfsshellapi,此处我们通过java程序来操作一下。2、环境准备需要在本地环境变量中配置HADOOP_HOME或在程序启动......
  • mac系统上hdfs java api的简单使用
    目录1、背景2、环境准备3、环境搭建3.1引入jar包3.2引入log4j.properties配置文件3.3初始化HadoopApi4、javaapi操作4.1创建目录4.2上传文件4.3列出目录下有哪些文......
  • 【DFS】LeetCode 17. 电话号码的字母组合
    题目链接17.电话号码的字母组合思路使用DFS进行枚举。代码classSolution{privateHashMap<Character,char[]>map=newHashMap<>();privateList<S......
  • 【DFS】LeetCode 131. 分割回文串
    题目链接131.分割回文串思路使用DFS,同时依次检查分割的字符串是否是回文串。注意:需要频繁添加删除末尾元素时,可以使用Deque代码classSolution{privateLis......
  • HDFS数据安全与隐私保护
    一、HDFSTrash垃圾桶1.文件系统垃圾桶背景HDFS本身也是一个文件系统,那么就会涉及到文件数据的删除操作。默认情况下,HDFS中是没有回收站垃圾桶概念的,删除操作的数据将......
  • hdfs file system shell的简单使用
    1、背景此处我们通过命令行,简单的学习一下hdfsfilesystemshell的一些操作。2、hdfsfilesystemshell命令有哪些我们可以通过如下网址https://hadoop.apache.org/d......