- 博客(15)
- 收藏
- 关注
转载 差分约束系统详解
前言差分约束系统是一种特殊的N元一次不等式组,不等式组的每一个不等式称为一个约束条件。通过不等式的变形,可以通过最短路算法对差分约束系统进行求解。相关定义约束条件:一个满足的不等式称为一个约束条件差分约束系统:一个由若干个约束条件构成的N元一次不等式组称为一个差分约束系统性质$i,j\in[1,n]$,$k\in [1,m...
2019-09-09 11:11:00
564
转载 AC自动机详解
首先,看清楚了,这是AC自动机不是自动AC机引用AC自动机模板题上的一句话:ovo在学习AC自动机之前,应该先掌握一下两个前置技能:TrieKMPAC自动机,通俗地讲,就是在Trie上跑KMP。AC自动机利用Trie的性质和KMP的思想,可以实现字符串的多模匹配。KMP是单模匹配,而它与AC自动机最大的区别就在fail指针的求法,其余思想基本相同...
2019-08-20 17:54:00
373
转载 KMP算法详解
KMP算法, 又称模式匹配算法,能快速判断字符串b是否为字符串a的子串。设a的长度为N,b的长度为N,则KMP算法的时间复杂度为O(N+M)。在讲解KMP算法之前,先将一种易懂的解决这类问题的方法:枚举a的每个元素$a_i$,每次枚举时比较$a_i$与$b_1,a_{i+1}$与$b_2$,...,$a_{i+N-1}$与$b_N$是否相等,若全部相等,则b为a的子串。时间复杂度...
2019-08-20 17:51:00
199
转载 ST算法详解
ST算法是求解RMQ问题的好方法,可以在0(NlogN)的预处理后实现O(1)的查询。该算法是在倍增的思想基础上实现的,比较基础,理解起来也不难。补充几个要点:RMQ问题:即区间最值问题,给出一个序列a,要求求出区间[l,r]内的最大值。倍增:(来自lyd的蓝书)log2(x)函数:返回$log_2x$,效率较高,需调用cmath库。左移运算符(<<...
2019-08-20 13:58:00
894
转载 Trie详解
Trie,又名字典树、单词查找树,可以较高效地实现统计、排序和保存大量的字符串。顾名思义,Trie是一个树状的结构,按照树型结构来存储字符串,显然是一种以空间换时间的方法。整体上理解和实现都不会很难。下面是实现方法:插入:当我们往一棵Trie中插入一个字符串时,我们先定义一个指针p指向根节点,然后依次扫描字符串的元素,设其为s;若s字符指向的是一个已存在的节点...
2019-08-20 13:53:00
273
转载 欧拉路径详解
什么是欧拉路径?欧拉路径就是一条能够不重不漏地经过图上的每一条边的路径,即小学奥数中的一笔画问题。而若这条路径的起点和终点相同,则将这条路径称为欧拉回路。如何判断一个图是否有欧拉路径呢?显然,与一笔画问题相同,一个图有欧拉路径需要以下几个条件:首先,这是一个连通图若是无向图,则这个图的度数为奇数的点的个数必须是0或2;若是有向图,则要么所有点的入度和出度相等,要么有且只有...
2019-08-19 13:52:00
1028
转载 树上差分详解
树上差分,顾名思义,就是在树上进行差分,以起到优化复杂度的目的。主要作用是对树上的路径进行修改和查询操作,在修改多、查询少的情况下复杂度比较优秀。实际上,树上差分能够实现的操作,用线段树、树剖、$LCT$等等也可以实现,但它的优势在于实现简单,可以避免在考场上出现写题五分钟、调试两小时的情况当然大佬可以忽略这点差分在讲解树上差分之前,先讲一下差分的思想。差分,可以当做前...
2019-08-19 13:47:00
1482
转载 LCA详解
LCA,即最近公共祖先,在图论中应用比较广泛。LCA的定义如下:给定一个有根树,若节点$z$同时是节点$x$和节点$y$的祖先,则称$z$是$x,y$的公共祖先;在$x,y$的所有公共祖先当中深度最大的称为$x,y$的最近公共祖先。下面给出三个最近公共祖先的例子:显然,从上面的例子可以得出,$LCA(x,y)$即为$x,y$到根节点的路径的交汇点,也是$x$到$y$的路径...
2019-08-19 13:33:00
1456
转载 树链剖分详解
树链剖分,顾名思义,就是对树剖分成链,然后用数据结构进行维护,以此降低维护的复杂度。必备知识点邻接表存图LCA线段树相关定义重儿子:一个节点所有子节点中以其为根的子树的节点最多的节点重边:一个节点到其重儿子的边重链:一条全部由重边构成的路径(特别地,一个节点也当做一条重链)轻儿子:...
2019-08-15 16:53:00
242
转载 树的直径详解
树的直径,又称树的最长链,定义为一棵树上最远的两个节点的路径,即树上一条不重复经过某一条边的最长的路径。树的直径也可以代指这条路径的长度。求树的直径有两种比较常用的方法:树形DP和搜索,时间复杂度均为$O(n)$。接下来会对两种方法都进行讲解。在接下来的实现中,树是以邻接表存无向边的形式给出的。树形DP设$d_x$表示从$x$走向以其为根的子树,能够到达的最远距离。再...
2019-08-14 13:47:00
6194
转载 左偏树详解
左偏树是一种比较常用的可并堆。那什么是可并堆呢?可并堆,顾名思义,是一种除了支持堆的基本操作外,还支持合并等操作的数据结构,如斜堆,左偏树,二项堆,配对堆,斐波那契堆等。左偏树写起来不难,跑起来也不错是一个老少咸宜的数据结构讲解之前先放一张左偏树的概念图:相关定义外节点:只有一个儿子或没有儿子的节点,即左右儿子至少有一个为空节点的节点距离:一...
2019-08-14 13:34:00
246
转载 最短路详解
最短路问题是图论中最基础的内容,在考试中也常常看到关于最短路的问题或模型。最短路问题,即在一个图中,寻找两个节点之间的最短路径的问题。最短路问题分为单源最短路径问题(SSSP问题)和多源最短路径问题,在本文中会一一进行讲解。在讲解最短路问题前,先补充几个知识点:存图的方法:常见的存图方法有邻接表和邻接矩阵,设该图有$n$个节点,$m$条边,则邻接表的空间复杂度为$O(...
2019-08-13 13:26:00
378
转载 树状数组基础
树状数组,顾名思义,是一个树形的数据结构,它的基本用途是较高效地维护序列的前缀和。先补充几个知识:lowbit运算:取出非负整数n在二进制下最低位的1以及它后边的0构成的数值。例如,若n=6,则n在二进制下表示为110,所以lowbit(n)=2。如何实现lowbit运算呢?设n>0,n的第k位是1,第0~k-1位都是0,则:将n取反,此时第k位为0,第...
2019-08-11 13:19:00
212
转载 并查集初步
并查集可以动态维护若干个不重叠的集合,支持查询和合并两个操作,在实际应用中比较广泛。并查集的主要功能是查询元素的集合归属,同时支持集合的合并操作。并查集的实现方法:对于每个集合,选择一个元素作为其代表元素,而若两个元素所在集合的代表元素相同,则说明它们在同一个集合中。具体如何实现呢?有一种思路,可以定义一个数组来存储每个数所在集合的代表元素,然而这种方法虽然在查询时很高效...
2019-08-10 13:30:00
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅