LCA

LCA

ST 表 LCA \(O(n\log n)\) 预处理,\(O(1)\) 查询。空间 \(O(n\log n)\) 考虑欧拉序,设 \(dfn[u]\) 为点 \(u\) 在欧拉序中第一次出现的位置 不妨设 \(dfn[u]<dfn[v]\),\(lca(u,v)\) 即为 \([dfn[u],df ......
LCA

lca 学习笔记

定义 最近公共祖先简称 \(LCA\) 两个节点的最近公共祖先,就是这两个点的公共祖先里,离根最远的的那个 为了方便,我们记某点集 \(S={v1,v2,...,vn}\) 的最近公共祖先为 \(LCA(v1,v2,...,vn)\) 或 \(LCA(S)\) LCA的有用的性质 \(1.\) \( ......
笔记 lca

st表lca

struct Lca{ int tot=0; int dep[N],pos[N],lca[N*2][20],lg[N*2]; void pre(int x,int fa){ dep[x]=dep[fa]+1,pos[x]=++tot,lca[tot][0]=x; for(int i=h[x];i;i ......
lca

【学习笔记】浅谈 RMQ 与 LCA

- $\text{update 2023.11.14}$:增加 $\text{LCA}$ 求解树上最短路的代码。 $\text{RMQ}$ 定义:区间最值查询,功能类 $\text{st}$ 表,预处理 $O(n\log_2n)$,查询 $O(q)$,总复杂度 $O(n \log _2n+q)$。 ......
笔记 RMQ LCA

最近公共祖先模板(LCA)

include <bits/stdc++.h> using namespace std; struct LCA { int n; vector<int> dep; vector<vector<int>> e; vector<array<int, 21>> fa; LCA() {} LCA(int n ......
祖先 模板 LCA

树链剖分——最近公共祖先(LCA)

N,M,S,分别表示树的结点个数、询问的个数和树根结点 理论时间复杂度上界就是O(2n+mlogn) const int N=500010; int n,m,s,a,b; vector<int> e[N]; int fa[N],son[N],dep[N],siz[N]; int top[N]; vo ......
祖先 LCA

P3379 【模板】最近公共祖先(LCA)

非常详细的题解见洛谷,个人见解见代码 #include<bits/stdc++.h> using namespace std; #define N 500005 vector<int> G[N];//链树,以链上的元素为根节点的树 void add(int x,int y) { G[x].push_ ......
祖先 模板 P3379 3379 LCA

倍增LCA

#include <bits/stdc++.h> using namespace std; int n,m,r,k,f[500010][50],d[500010]; vector<int> v[500010]; void dfs(int x,int deep){ d[x]=deep; for(int ......
LCA

最近公共祖先(LCA)

最近公共祖先(LCA) 概念 在有根树中,两个点,会有共同的祖先,离他们两最近的公共祖先,即为LCA 求法 向上表记法O(n) 从一个点开始,向上遍历,把走过的点标记一下 再从另外一个点开始,向上遍历,如果走到的点已经被标记,即为LCA 最坏的情况是条链,\(O(n)\)的复杂度 倍增法 O(log ......
祖先 LCA

11.21学习小结 //LCA

倍增求LCA 参考博文:https://www.cnblogs.com/hulean/p/11144059.html 参考博文:https://www.cnblogs.com/jvxie/p/4854719.html · 记录每个点的深度,和往前2^i的祖先。 · 先把两个点提到同一高度,再统一开始 ......
小结 11.21 LCA 11 21

【题解 P4211】 LCA

[LNOI2014] LCA 题目描述 给出一个 \(n\) 个节点的有根树(编号为 \(0\) 到 \(n-1\),根节点为 \(0\) )。 一个点的深度定义为这个节点到根的距离 \(+1\)。 设 \(dep[i]\) 表示点 \(i\) 的深度,\(\operatorname{LCA}(i, ......
题解 P4211 4211 LCA

CF1304E 1-Trees and Queries(lca+树上前缀和+奇偶性)

题目 二话不说,直接按题意模拟暴搜,当然 \(O(nq)\) 的复杂度显然是寄了的。 不过,在模拟的过程中,我在链式前向星的删边中居然一开始错了,还是要 mark 一下以后注意。 void del(int x, int pre) { e[top].to = e[top].next = 0; h[x] ......
奇偶 前缀 Queries 1304E Trees

离线快速LCA(最近公共祖先) Tarjan算法

离线快速LCA(最近公共祖先) Tarjan算法 前言 对于 OIer 来说,LCA 一直是处理树上问题的好帮手,无论是倍增还是树剖都有着优秀的 \(\log n\) 的复杂度。不过由于我们(数据规模)的上进,需要更快速求 LCA,于是就有了…… 反正之前打死我都不相信这玩意能离线,还能 O(1) ......
祖先 算法 Tarjan LCA

欧拉序求LCA

使用欧拉序 st 表 O(1) 求 LCA 欧拉序 st 表求 LCA 一开始是从某篇题解里看到的,后来百度了一下就会了( 这是一种预处理 O(nlogn) ,查询 O(1) 的优秀算法。 什么是欧拉序 举个例子,下面是一棵树: 上面有 dfs 与回溯的过程。 将整个 dfs 与回溯过程写出来: 1 ......
LCA

基于dfn序的O(nlogn)-O(1) lca

\(dfn\)序的长度是欧拉序的一半,常数较小,并且代码便于理解背诵。 让欧拉序求lca成为时代的眼泪。 代码部分实现思路来自cqbz_dongjie 点击查看代码 auto minlca = [&](int x, int y) { return (dfn[x] < dfn[y])? x : y; ......
nlogn dfn lca

LCA学习笔记

定义 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 求法 有多种求法,目前就学习了倍增和 dfs 序求 LCA ,等后面学新的了再加上。 前置知识: ST 表,dfs 序。 为方便说明,下面全都是求 \ ......
笔记 LCA

6580: 聚会 倍增LCA

描述 Y 岛风景美丽宜人,气候温和,物产丰富。Y 岛上有 N 个城市,有 N−1 条城市间的道路连接着它们。每一条道路都连接某两个城市。幸运的是,小可可通过这些道路可以走遍 Y 岛的所有城市。神奇的是,乘车经过每条道路所需要的费用都是一样的。 小可可,小卡卡和小 YY 经常想聚会,每次聚会,他们都会 ......
6580 LCA

LCA性质

https://zhuanlan.zhihu.com/p/644325700 1 \[LCA(p_1,p_2,p_3...p_n)=LCA(LCA(LCA(p_1,p_2),p_3),...p_n) \]证明略 2 \[LCA(p_1,p_1,p_2)=LCA(p_1,p_2) \]所以LCA相关可 ......
性质 LCA

P1967 [NOIP2013 提高组] 货车运输 (生成树,LCA)

P1967 [NOIP2013 提高组] 货车运输 https://www.luogu.com.cn/problem/P1967 首先有些边是没用的(比较小的边),比如两个点之间的两条(并行的)路,只有较大的会被走到,小的不会被走,因此可以直接去除小的边,即求最大生成树。 接着做求任意两点经过的边的 ......
货车 P1967 1967 NOIP 2013

6577: 暗的连锁 LCA+树上差分

描述 Dark 是一张无向图,图中有 N 个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark 有 N–1 条主要边,并且 Dark 的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark 还有 M 条附加边。 你的任务是把 Dark 斩为不连通的两部分。一开始 Dark 的 ......
6577 LCA

三个主要降维技术对比介绍:PCA, LCA,SVD

前言 本文将深入研究三种强大的降维技术——主成分分析(PCA)、线性判别分析(LDA)和奇异值分解(SVD)。我们不仅介绍这些方法的基本算法,而且提供各自的优点和缺点。 本文转载自DeepHub IMBA 作者:Indraneel Dutta Baruah 仅用于学术分享,若侵权请联系删除 欢迎关注 ......
三个 技术 PCA LCA SVD

三个主要降维技术对比介绍:PCA, LCA,SVD

随着数据集的规模和复杂性的增长,特征或维度的数量往往变得难以处理,导致计算需求增加,潜在的过拟合和模型可解释性降低。降维技术提供了一种补救方法,它捕获数据中的基本信息,同时丢弃冗余或信息较少的特征。这个过程不仅简化了计算任务,还有助于可视化数据趋势,减轻维度诅咒的风险,并提高机器学习模型的泛化性能。 ......
三个 技术 PCA LCA SVD

浅谈关于LCA

prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显。 main body 倍增法 先讨论倍增法,倍增法求 lca 是一种很常见普遍的方法,这里直接放代码了,其本身的内核就是让较低点每次都跳 $ 2 ^ k $ ......
LCA

童程OJ:树上任意两点的距离 带权LCA

描述 给出 n 个点的一棵树,多次询问两点之间的最短距离。注意:边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数;下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间存在一条边长度为 k;再接下来 m 行,每行两个整数 x,y,表示询问点 x 到 ......
LCA

dfs 序 O(nlogn)-O(1) 求 LCA

学点分树,发现不会询问复杂度 \(O(1)\) 的 LCA。于是被迫递归式学习。 我们设 \(dfn_i\) 表示点 \(i\) 在 dfs 过程中第几个被访问到,把点按访问到的顺序排序得到的序列叫 dfs 序。 考虑 \(u\) 和 \(v\) 在 dfs 序上的位置之间的这一段序列有什么。 设 ......
nlogn dfs LCA

AtCoder Beginner Contest 126 D (图论、LCA性质、DFS、思维、*1200)

D - Even Relation 给你一棵树 (结点个数为 $ n(n \le 10^5) $, 现在需要将树上所有结点染成白色或黑色, 打印一种可行的方案(将 $ i $ 号点染成白色则输出 0, 否则, 输出 1), 满足:同一种颜色的点之间的距离是偶数。 思路: ......
Beginner 性质 思维 AtCoder Contest

有关dfs序求lca的相关问题及常见问题

本文主要是用于警示自己避免犯错。 参考代码 dfs 序求 lca 的参考代码如下。 #include<bits/stdc++.h> using namespace std; const int MAXN=5e5+10,MAXLOG2N=20; int N,M,S,cnt,head[MAXN],dfn ......
问题 常见问题 常见 dfs lca

6576: 点的距离 倍增LCA

描述 给定一棵 n 个点的树,Q 个询问,每次询问点 x 到点 y 两点之间的距离。 输入 第一行一个正整数 n,表示这棵树有 n 个节点; 接下来 n−1 行,每行两个整数 x,y表示 x,y 之间有一条连边; 然后一个整数 Q,表示有 Q 个询问; 接下来 Q 行每行两个整数 x,y 表示询问 ......
6576 LCA

科技:dfn 求 LCA

upd: 2023.09.13 新建 非常好思路,学习自 Alex_Wei。 摘要 使用 st 表维护区间内所有点的 dfn 最小的父节点。 优点是好写、时间空间常数小。 前置约定 \(dfn_{i}\) :\(i\) 是第几个被访问的点 \(sub_{i}\) :以 \(i\) 为根的子树 \(L ......
科技 dfn LCA

【模板】最近公共祖先LCA——倍增

题目来自洛谷P3379 【模板】最近公共祖先(LCA) 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 \(N,M,S\),分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 \(N-1\) 行每行包含 ......
祖先 模板 LCA