题目传送门 树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链。 以下是几种概念: 常见的路径剖分的方法是轻重树链剖分(启发式剖分) 将树中的边分为:轻边和重边 ? ...
分类:
其他好文 时间:
2018-03-19 19:04:30
阅读次数:
157
简单列了一点 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 1.2 中级数据结构 1. 堆 2. 并查集与带权并查集 3. hash 表 自然溢出 双hash 1.3 高级数据结构 1. 树状数组 2. 线段树,线段树合并 3. 平衡树 T ...
分类:
编程语言 时间:
2018-03-01 00:38:54
阅读次数:
225
树: 树的一种链式存储方法: 每个节点都有两个指针, 一个指向下一层第一个结点, 一个指向右侧兄弟结点; 二叉树: 二叉树是每个节点最多有两个子树的树结构 概念: 度(结点的度):结点的子树个数; 度(树的度):结点的子树个数最大的度为树的度; 叶结点:度为0的结点; 特殊二叉树: 斜二叉树: 向左 ...
分类:
其他好文 时间:
2018-02-22 22:04:27
阅读次数:
173
数据结构 1.树链剖分 (1)如果边 u v 为轻边,那么 $size[v]\leq size[u]/2$。 证明:若 $size[v] size[u]/2$,那么 u v 会成为一条重边。 (2)树中任意两个节点之间的路径中重边、轻边的条数均不会超过$log_2n$,即树上任意一条链由不超过$lo ...
分类:
其他好文 时间:
2018-02-21 13:07:12
阅读次数:
101
1.树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系。 2. 树本身是递归的,即一棵树由若干颗子树构成,而子树又由更小的子树构成。 3. 二叉树的遍历过程实质上是按一定规则将之线性化的过程。按照先遍历左子树后遍 ...
分类:
其他好文 时间:
2018-02-20 22:52:19
阅读次数:
179
模板: 示意图: 1.Ultra-QuickSort 大佬代码: //树状数组 #include<iostream> #include<string.h> #include<algorithm> using namespace std; #define MAX 500010 int c[MAX]; ...
分类:
编程语言 时间:
2018-02-18 23:03:48
阅读次数:
220
前面我们介绍了树这种数据结构,树是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,包括二叉树、红黑树、2-3-4树、堆等各种不同的树,有对这几种树不了解的可以参考我前面几篇博客。而本篇博客我们将介绍另外一种数据结构——图,图也是计算机程 ...
分类:
编程语言 时间:
2018-02-14 18:20:37
阅读次数:
210
一直以为k-d树是一种高级的数据结构,和LCT可以并列;不过实际上没那么厉害。 k-d树解决的是k维空间里的点的范围查找问题。k维空间必须满足两点之间的距离是欧几里德距离,比如二维的话,A(x1,y1)和B(x2,y2)的距离就是√(x1-x2)2+(y1-y2)2。 k-d树是一颗二叉搜索树,只不 ...
分类:
其他好文 时间:
2018-02-04 00:26:45
阅读次数:
179
与队列和堆栈一样,树也是人为构造的一种数据存储逻辑。 树,一般是为了使数据的搜索更加容易而构筑的,比如下文会提到的二叉搜索树。 首先我们来看一下树的课本定义。 树(Tree),是元素的集合。 假设我们有这样一组数据,{ 6,3,5,1,8,7,9 },我们使用树的形式来存放他们,得到了这样一棵树。 ...
分类:
其他好文 时间:
2018-01-29 16:18:22
阅读次数:
109
我们有时候遇到这样一类题目,让我们维护树上路径的某些信息,这个时候发现我们无法用线段树或者树状数组来维护这些信息,那么我们就有着一种新的数据结构,树剖:将一棵树划分成若干条链,用数据结构去维护每条链,复杂度为O(logN)。 剖分方法: 盲目剖分 随机剖分 启发式剖分综合比较,启发式剖分是剖分时的最 ...
分类:
其他好文 时间:
2017-12-17 22:17:53
阅读次数:
132