随笔分类 - 【学习笔记】数据结构
摘要:【学习笔记】树上启发式合并 简介 树上启发式合并 dsu on tree,是一种 离线 算法,通过钦定一个更好的询问顺序,来优化时间复杂度,其实本质上还是暴力,有点类似莫队。有关 dsu on tree 的问题,常常是询问 子树内 的颜色数啥玩意的。 实现 对于每一个节点 \(u\),按以下顺序遍历
阅读全文
摘要:【复习笔记】莫队 简介 莫队可以用来批量处理区间问题,是 一种高效的暴力。 实现 将区间 \([1,n]\) 分为长度为 \(B\) 的若干块,将 左端点 排序,对于左端点在同一块内的询问,再按 右端点 排序。 复杂度证明: 左端点 在 同一个 内一次最多移动 \(B\),由于有 \(q\) 次询问
阅读全文
摘要:园方树 前置知识-点双连通分量 点双连通图:图中任意两不同点之间,都有至少两条点不重复的路径。 “点不重复”指两条路径的交集为空(不考虑出发点和终点)。 而一个图的 点双连通分量 则是一个 极大点双连通子图。 所以每一条边 恰属于一个 点双,每一个点属于 至少一个 点双。 定义 园方树 是一种用来将
阅读全文
摘要:线段树合并 实现 每次递归到叶子节点合并。 线段树合并 单次时间复杂度 \(O(n \log n)\)。 证明:每次递归会让区间长度减半,所以最多会递归 \(O(\log n)\) 层,而区间长度为 \(n\),所以叶子节点有\(n\) 个,所以最多合并 \(O(n\log n)\) 次。 因为如果
阅读全文
摘要:简介 虚树就是一种很无奈时的无赖做法 --唐末 当题目中答案只与某些关键点有关,而关键点很稀疏时,就可以用虚树将整棵树浓缩。 建虚树 方法一: 二次排序 + LCA 连边 将所有关键点按 dfn 序排序,求出相邻两个点的 LCA(确定虚树中的所有点)。 将所有 LCA 及关键点去重并再次按 dfn
阅读全文
摘要:类型 树上差分,一般是用来解决路径修改,单点查询的问题。一般有两种类型: 对边权进行修改 对点权进行修改 对于第一种类型可以将每个边权转移到其对应的儿子上,进而转化为第二种类型。 每一个点记录的是他的权值与所有儿子权值和的差,即: \[x_u=w_u-\sum w_{son_u} \]最后查询每个点
阅读全文
摘要:几个概念 dfs 序:dfs 遍历的节点序列(第 \(i\) 次访问几号节点) 欧拉序:与 dfs 序类似,但是返回时也要记录(长度为 \(2n-1\)) 性质:设 dfs 序列为 \(a\),则 \(a_{dfn_i}=i\)。 步骤: dfs 预处理出欧拉序,和第一次以及最后一次在欧拉序上出现的
阅读全文
摘要:介绍 平衡树是一种特殊的二叉树搜树,他能在被修改后,依靠分裂,合并,等操作使得树能始终保持平衡(每一个节点的两棵子树的大小尽量相等),这里主要讲解 FHQtreap。 前置知识 二叉搜索树:是一种特殊的二叉树,满足左儿子的 所有 节点,小于根;根小于右儿子的所有节点。 操作 FHQtreap 也叫无
阅读全文
摘要:笛卡尔树 介绍 笛卡尔树是一种二叉树,每一个节点由一个键值二元组 \((k,w)\) 构成,其中 \(k\) 满足二叉搜索树的性质,而 \(w\) 满足小顶堆的性质 性质 1.两个维度的键值分别满足 BST 和小顶堆的性质 2.题目中往往用数组下表当作 \(k\) 因此笛卡尔树每一个节点子树的下标都
阅读全文
摘要:【学习笔记】分块 算法简介 分块是一种优雅的暴力,他的实现原理是将一段区间分割成一些长度相等的整块和一些散块进行暴力,有点类似线段树。 每一次操作时将区间分成中间的一些整块,和两端的一些散块。举一个例子,假设我们要对区间\([2,10]\)进行操作,假设整块的块长为\(3\),那么整个大区间就可以分
阅读全文

浙公网安备 33010602011771号