nlogn dfn 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

O(nlogn)排序算法

排序算法 介绍常见时间复杂度为\(O(nlogn)\)的排序算法 1. 快速排序 分治思想 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int a[N]; void quick_sort(int l, in ......
算法 nlogn

时间复杂度为 O(nlogn) 的排序算法

归并排序遵循分治的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解 ......
复杂度 算法 时间 nlogn

最近公共祖先(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

O(nlogn)复杂度三维偏序

给定三个长为 \(n\) 的序列 \(a, b, c\),求有多少个二元组 \((i, j)\) 满足 \(a_i < a_j, b_i < b_j, c_i < c_j\)。 \(n \leq 10^6\)。 考虑对 \((a, b), (a, c), (b, c)\) 分别做一次二维偏序,设它们 ......
偏序 复杂度 nlogn

离线快速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