![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
hzeroto
这个作者很懒,什么都没留下…
展开
-
树链剖分算法整理
树链剖分 树链剖分可以把树分成若干条链,从而维护树上的路径信息。本质思想是把树剖成可以用线性结构存储的结构,然后可以数据结构维护。 分为三种:重链剖分、长链剖分、实链剖分。以下以重链剖分为主。 重链剖分可以将树上的任意一条路径划分成不超过O(logn)O(logn)O(logn)条连续的链,每条链上的点深度互不相同(即是自底向上的一条链,链上所有点的 LCA 为链的一个端点)。 重链剖分还能保证划分出的每条链上的节点 DFS 序连续,因此可以方便地用一些维护序列的数据结构(如线段树)来维护树上路径的信息。原创 2020-11-13 22:33:22 · 849 阅读 · 0 评论 -
最近公共祖先算法详解LCA(附倍增、Tarjan、树链剖分方法及模板)
最近公共祖先(LCA) 模板题洛谷P3379 定义 两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 倍增算法 考虑了二进制的思想,预处理每个结点uuu的2i2^i2i层父亲结点的下标,(其中i=0,1,2...,n. 2n≤cntui=0,1,2...,n.\ 2^n \leq cnt_ui=0,1,2...,n. 2n≤cntu),遍历处理即可,复杂度O(n)O(n)O(n)。然后 首先对于查询的两个结点,将两者转移至同一深度,方式为把深度更深的结点按二进制原创 2020-11-12 15:43:03 · 361 阅读 · 0 评论 -
主席树理解
主席树(可持久化权值线段树) 前置知识:线段树、权值线段树、离散化、前缀和。 简单回顾 线段树 众所周知,线段树是用来维护区间信息的最常用方法之一,其核心思想在于用分治在的时间内来预处理区间信息,同时用logloglog的时间来进行区间查询和修改。还没有完全理解线段树的同学希望自己先多花时间去从根本上理解线段树的思维,不然后面可能会一直懵圈到底。 离散化 当有些数据因为本身很大或者类型不支持,自身无法作为数组的下标来方便地处理,而影响最终结果的只有元素之间的相对大小关系时,我们可以将原来的数据按照从大到小编原创 2020-11-11 23:11:55 · 142 阅读 · 1 评论