AC自动机详解
摘要:首先,看清楚了,这是AC自动机不是自动AC机 引用AC自动机模板题上的一句话: ovo 在学习AC自动机之前,应该先掌握一下两个前置技能: Trie KMP AC自动机,通俗地讲,就是在Trie上跑KMP。AC自动机利用Trie的性质和KMP的思想,可以实现字符串的多模匹配。KMP是单模匹配,而它与
阅读全文
posted @
2019-08-20 17:54
TEoS
阅读(542)
推荐(0)
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$,...
阅读全文
posted @
2019-08-20 17:51
TEoS
阅读(370)
推荐(0)
ST算法详解
摘要:ST算法是求解RMQ问题的好方法,可以在0(NlogN)的预处理后实现O(1)的查询。该算法是在倍增的思想基础上实现的,比较基础,理解起来也不难。 补充几个要点: RMQ问题:即区间最值问题,给出一个序列a,要求求出区间[l,r]内的最大值。 倍增:(来自lyd的蓝书) log2(x)函数:返回$l
阅读全文
posted @
2019-08-20 13:58
TEoS
阅读(1148)
推荐(0)
Trie详解
摘要:Trie,又名字典树、单词查找树,可以较高效地实现统计、排序和保存大量的字符串。 顾名思义,Trie是一个树状的结构,按照树型结构来存储字符串,显然是一种以空间换时间的方法。整体上理解和实现都不会很难。 下面是实现方法: 插入: 当我们往一棵Trie中插入一个字符串时,我们先定义一个指针p指向根节点
阅读全文
posted @
2019-08-20 13:53
TEoS
阅读(503)
推荐(0)
欧拉路径详解
摘要:什么是欧拉路径?欧拉路径就是一条能够不重不漏地经过图上的每一条边的路径,即小学奥数中的一笔画问题。而若这条路径的起点和终点相同,则将这条路径称为欧拉回路。 如何判断一个图是否有欧拉路径呢?显然,与一笔画问题相同,一个图有欧拉路径需要以下几个条件: 首先,这是一个连通图 若是无向图,则这个图的度数为奇
阅读全文
posted @
2019-08-19 13:52
TEoS
阅读(12774)
推荐(2)
树上差分详解
摘要:树上差分,顾名思义,就是在树上进行差分,以起到优化复杂度的目的。主要作用是对树上的路径进行修改和查询操作,在修改多、查询少的情况下复杂度比较优秀。实际上,树上差分能够实现的操作,用线段树、树剖、$LCT$等等也可以实现,但它的优势在于实现简单,可以避免在考场上出现写题五分钟、调试两小时的情况 当然大
阅读全文
posted @
2019-08-19 13:47
TEoS
阅读(17489)
推荐(9)
LCA详解
摘要:LCA,即最近公共祖先,在图论中应用比较广泛。 LCA的定义如下:给定一个有根树,若节点$z$同时是节点$x$和节点$y$的祖先,则称$z$是$x,y$的公共祖先;在$x,y$的所有公共祖先当中深度最大的称为$x,y$的最近公共祖先。下面给出三个最近公共祖先的例子: 显然,从上面的例子可以得出,$L
阅读全文
posted @
2019-08-19 13:33
TEoS
阅读(4881)
推荐(1)
树链剖分详解
摘要:树链剖分,顾名思义,就是对树剖分成链,然后用数据结构进行维护,以此降低维护的复杂度。 必备知识点 邻接表存图 LCA 线段树 邻接表存图 LCA 线段树 相关定义 重儿子:一个节点所有子节点中以其为根的子树的节点最多的节点 重边:一个节点到其重儿子的边 重链:一条全部由重边构成的路径(特别地,一个节
阅读全文
posted @
2019-08-15 16:53
TEoS
阅读(1229)
推荐(0)
树的直径详解
摘要:树的直径,又称树的最长链,定义为一棵树上最远的两个节点的路径,即树上一条不重复经过某一条边的最长的路径。树的直径也可以代指这条路径的长度。 求树的直径有两种比较常用的方法:树形DP和搜索,时间复杂度均为$O(n)$。接下来会对两种方法都进行讲解。 在接下来的实现中,树是以邻接表存无向边的形式给出的。
阅读全文
posted @
2019-08-14 13:47
TEoS
阅读(3518)
推荐(2)
左偏树详解
摘要:左偏树是一种比较常用的可并堆。那什么是可并堆呢?可并堆,顾名思义,是一种除了支持堆的基本操作外,还支持合并等操作的数据结构,如斜堆,左偏树,二项堆,配对堆,斐波那契堆等。 左偏树写起来不难,跑起来也不错 是一个老少咸宜的数据结构 讲解之前先放一张左偏树的概念图: 相关定义 外节点:只有一个儿子或没有
阅读全文
posted @
2019-08-14 13:34
TEoS
阅读(3257)
推荐(2)
最短路详解
摘要:最短路问题是图论中最基础的内容,在考试中也常常看到关于最短路的问题或模型。 最短路问题,即在一个图中,寻找两个节点之间的最短路径的问题。最短路问题分为单源最短路径问题(SSSP问题)和多源最短路径问题,在本文中会一一进行讲解。 在讲解最短路问题前,先补充几个知识点: 存图的方法:常见的存图方法有邻接
阅读全文
posted @
2019-08-13 13:26
TEoS
阅读(663)
推荐(0)
树状数组基础
摘要:树状数组,顾名思义,是一个树形的数据结构,它的基本用途是较高效地维护序列的前缀和。 先补充几个知识: lowbit运算:取出非负整数n在二进制下最低位的1以及它后边的0构成的数值。例如,若n=6,则n在二进制下表示为110,所以lowbit(n)=2。如何实现lowbit运算呢?设n>0,n的第k位
阅读全文
posted @
2019-08-11 13:19
TEoS
阅读(425)
推荐(0)
并查集初步
摘要:并查集可以动态维护若干个不重叠的集合,支持查询和合并两个操作,在实际应用中比较广泛。 并查集的主要功能是查询元素的集合归属,同时支持集合的合并操作。 并查集的实现方法:对于每个集合,选择一个元素作为其代表元素,而若两个元素所在集合的代表元素相同,则说明它们在同一个集合中。 具体如何实现呢?有一种思路
阅读全文
posted @
2019-08-10 13:30
TEoS
阅读(365)
推荐(0)