囧啊囧。lca的求法太多了倍增,tarjan,st,lct,hld....后边三个我就不写了,其中st我没写过,估计用不上,在线用倍增,离线用tarjan就行了。嗯。第一种,倍增(O(nlogn)~O(logn),在线):倍增的思想用在树上,即可以求出lca。我们维护二维数组,f[i][j],表示i...
转载
2021-08-11 14:18:25
102阅读
今天终于把倍增的LCA搞懂了!尽管周测都没写,尽管lca其实很简单,但这也是进度君的往前一点点的快乐。学渣的呻吟。 倍增的lca其实关键就在于二进制的二进制的拆分(显然是两次的拆分,很奇妙,懂二进制的自然不觉得什么)。把最关键的地方在这里列举一下吧: 1.f[fa][i]=f[f[fa][i-1]]
转载
2018-09-21 21:32:00
73阅读
2评论
最近公共祖先(LCA) 首先是最近公共祖先的概念 (什么是最近公共祖先? ): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点 朴素算法 求最近公共祖先的方法有很多,想最简 ...
转载
2021-08-20 15:09:00
230阅读
2评论
方法1:向上标记法 时间复杂度:\(O(n)\) 待查询点为a和b,首先从a点向根节点进行搜索,将路径上的点进行标记, 再从b点向根节点进行搜索,同时检测路径上的点是否被标记过,第一次检测到的点即为a,b两点的最近公共祖先 方法2:倍增 时间复杂度 预处理:\(O(nlog_n)\) 查询: \(O ...
转载
2021-09-04 14:42:00
198阅读
2评论
向上标记法
时间复杂度:$O(n)$
待查询点为a和b,首先从a点向根节点进行搜索,将路径上的点进行标记,
再从b点向根节点进行搜索,同时检测路径上的点是否被标记过,第一次检测到的点即为a,b两点的最近公共祖先
倍增
时间复杂度
预处理:$O(nlog_n)$
查询: $O(log_n)$
相关概念及性质
节点祖先:从根到该节点所经分支上的所有节点,从根节点到此节点的路径中除了此节点本身(但是
原创
2023-07-15 23:27:43
69阅读
最近公共祖先LCA 定义 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 例题 这里先举例具体题目,下面根据不同方法给出不用题解代码。 洛谷 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多 ...
转载
2021-04-10 00:50:00
369阅读
2评论
题目链接 P3379 【模板】最近公共祖先(LCA) P3379 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 \(N,M,S\),分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 \(N-1\) ...
转载
2021-09-20 22:07:00
254阅读
2评论
原题链接 https://www.luogu.com.cn/problem/P3379 思路 求解 LCA 问题有两种方法: 树上倍增 基于倍增思想 Tarjan 离线算法,用并查集维护 蒟蒻代码 树上倍增 #include <bits/stdc++.h> #define re register # ...
转载
2021-10-31 15:37:00
90阅读
2评论
是最近公共祖先?):Tarjan/DFS+ST/倍增 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 ...
原创
2023-02-17 16:55:27
105阅读
1.倍增LCA 通过记录f[i][j],每个点第2的j次方个父亲的编号,来找LCA 代码中,先要处理出每个点的深度,和father(f[i][0]),然后倍增求出所有的祖先。 work的时候,利用二进制拆分的思想,先把两个节点向上翻到同一个深度,再同时向上翻,直到到了lca的儿子位置,再返回f[x]
转载
2018-05-13 12:02:00
86阅读
2评论
向上标记法
时间复杂度:$O(n)$
待查询点为a和b,首先从a点向根节点进行搜索,将路径上的点进行标记,
再从b点向根节点进行搜索,同时检测路径上的点是否被标记过,第一次检测到的点即为a,b两点的最近公共祖先
倍增
时间复杂度
预处理:$O(nlog_n)$
查询: $O(log_n)$
相关概念及性质
节点祖先:从根到该节点所经分支上的所有节点,从根节点到此节点的路径中除了此节点本身(但是
原创
2023-07-19 22:53:21
84阅读
转载
2020-01-12 19:09:00
93阅读
2评论
一、内容给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n。有 m 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x 与 y 的祖孙关系。输入格式输入第一行包括一个整数 表示节点个数;接下来 n 行每行一对整数 a 和 b,表示 a 和 b 之间有一条无向边。如果 b 是 −1,那么 a 就是树的根;第 n+2 行是一个整数 m 表示询问个数;...
原创
2022-01-06 16:11:24
174阅读
Tarjan-LCA算法: 对于每一点u: 1.建立以u为代表元素的集合。 2.遍历与u相连的节点v,如果没有被访问过,对于v使用Tarjan-LCA算法,结束后,将v的集合并入u的集合。 3.对于与节点u相关的询问(u,v),如果v被访问过,则结果就是v所在集合的所代表的元素。求(u,v)的最近公共祖先节点,则询问时调用QEdges[k].lca = find(QEdges[k].to);
原创
2015-05-04 11:17:58
50阅读
转载记得告诉千千哦~同步更新:https://www.dreamwings.cn/lca/4874.html概述篇LCA (Least Commo
原创
2022-08-10 10:51:54
83阅读
题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入输出格式输入格式:第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树)。接下来M行每行包含两个正整数a、b,表示询问a结点和b结点的最近公共祖先。输出格式...
原创
2021-07-12 17:38:02
169阅读
LCA 最近公共祖先 (模板)
原创
2021-07-14 15:10:02
92阅读
##题目大意:题目链接:https://ww...
转载
2018-08-14 16:29:00
45阅读
2评论
##题目大意:题目链接:https://ww...
转载
2018-08-14 16:29:00
55阅读
2评论
2018-03-10 18:04:55 在图论和计算机科学中,最近公共祖先,LCA(Lowest Common Ancestor)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点。 计算最近公共祖先往往是很有用的,比如在计算树中两个节点的距离的时候,可以分别计算根到各个节点的距离,然后
转载
2018-03-11 16:29:00
107阅读
2评论