随笔分类 - 算法学习笔记
树链剖分(学习笔记)
摘要:P3384 【模板】重链剖分/树链剖分 - 洛谷 简介: 树剖,也就是树链剖分。跟名字一样,就是将一棵树给剖分成链,这样树上操作就变为了链上的操作,通常树剖常与数据结构(如线段树)出场,这些数据结构用来维护链上信息。所以树剖能让你的代码暴涨 \(1k\) (总之就是非常毒瘤) 。同时它还可以解决 \
状压DP(学习笔记)
摘要:简介: 状压 \(dp\) 很明显是将状态压缩后进行 \(dp\),这种算法多用于状态只有两种的情况,且一般给定范围较小,如 \(n \leq 16\) 等,遇到这种情况就可以考虑去状压 \(dp\)。 前置知识: 我们知道一个数可以表示成二进制,如 \((25)_{10}=(1101)_2\) 那
同余最短路(学习笔记)
摘要:简介: 同余最短路,光是看名字就会发现与同余和最短路有关。同余最短路常用来解决的问题是: 当出现形如「给定 \(n\) 个整数,求这 \(n\) 个整数能拼凑出多少的其他整数(\(n\) 个整数可以重复取)」,以及「给定 \(n\) 个整数,求这 \(n\) 个整数不能拼凑出的最小(最大)的整数」,
神级STL结构-rope大法(学习笔记)
摘要:简介: 他是一个 \(STL\) 中自带的一种数据结构,是 pb_ds(Policy-Based Data Structures)库 的一个分支,由于他的底层是可持久化平衡树——红黑树,或块状链表。所以他的操作的复杂度几乎约等于 \(O(logn)\) 或 \(\sqrt n\) 。它可支持操作较多
平衡树-Splay(学习笔记)
摘要:P3369 【模板】普通平衡树 借鉴文章 二叉搜索树: 定义: 他是一颗节点上带有权值的二叉树 空树是二叉搜索树 若根节点的左子树不为空,则左子树内点的权值均小于根节点的权值 若根节点右子树不为空,则右子树内点的权值均大于根节点的权值 换句话说,若用中序遍历这棵树,随后的序列单调不减: 如图 这里要
莫队套分块-学习笔记
摘要:莫队套分块 P4396 [AHOI2013] 作业 题目翻译: 给定一个长度为 \(n\) 的序列,\(m\) 次询问,每一次给出 \(l,r,a,b\) 及求在区间 \([l,r]\) 间在值域 \([a,b]\) 的所有数的个数,和数的种数。 算法理解: 莫队套分块,显而易见就是在运用莫队的前提
莫队-带修莫队(学习笔记)
摘要:P1903 [国家集训队] 数颜色 / 维护队列 简述: 我们发现莫队的操作是离线的,且只能经行查询工作,但如果遇到需要修改的题目该如何办。这时候就需要用带修莫队来维护了,带修莫队也是一种离线算法,复杂度也约等于 \(O(n\sqrt n)\) 原理: 我们可以在维护一个修改的时间刻。也就是修改的时
莫队-普通莫队(学习笔记)
摘要:莫队 引言: 莫队是一种运用了分块思想的一种用来解决区间问题的算法,由于他是由国家集训队队长莫涛提出的算法,因此取名莫队。注意普通莫队的基本时间复杂度为 \(O(n\sqrt n)\),并且他是一种离线算法,所以强制在线的算法不能使用 思想: 若我们想要知道某一区间内有多少种不同的值和每一种的个数。
树状数组(学习笔记)
摘要:例题一:P3374 【模板】树状数组 1 例题二:P3368 【模板】树状数组 2 作用: 特征: 一个多用于区间修改,和单点查询。或区间查询单点修改的数据结构,其代码量较少,比较好写。 区别: 它与线段树的功能差不多,但线段树的可拓展性更强。也就是说:树状数组能做的,线段树都能做;而线段树能做的,
区间DP(学习笔记)
摘要:P1880 [NOI1995] 石子合并 特点: \(1.\)合并: 他可以有两个或多个区间合并而成进行求解,反之亦然 \(2.\)求解: 对于求每个区间的最优解,可以来求其子区间的最优解来合并转移,如一区间的最优解是其左右区间合并的最优解,那就合并左右子区间的最优解来求该区间的最优解 实现: \(
最小生成树(学习笔记)
摘要:最小生成树\(kruskal\) P3366 【模板】最小生成树 作用: 可以用来在一个无向连通图中找到一颗生成树,使其边权之和最小 算法原理: \(kruskal\)运用了贪心的思想;也就是说每一次都找最短的边。因此我们只需要将所有边储存下来,再将他们从小到大进行排序,在遍历每一个边,若这个边的两
最近公共祖先LCA(学习笔记)
摘要:\(LCA\) P3379 【模板】最近公共祖先(LCA) 定义: 在一棵树上,任意两个节点,往上找的最近的公共根节点就是他们两个的最近公共祖先\(LCA\) 作用: 可用于求树上任意两个点的路径和其路径的权值关系,如边权最大值,边权和等,都是以\(logn\)的复杂度 实现: 倍增: 倍增,顾名思
拓扑排序(学习笔记)
摘要:\(topusort——Kahn\) B3644 【模板】拓扑排序 / 家谱树 定义: 拓扑排序是指在一有向无环图中,找到一点的顺序,使得每一个排在前面的树不能依赖后面的节点,及后面的节点无法到达前面的节点 作用: 拓扑排序可以判断图中是否有环,还可以用来判断图是否是一条链。拓扑排序可以用来求 AO
并查集(学习笔记)
摘要:用处: 并查集是一种用来处理不同集合之间的关系的算法。正如它名字一样它本身就是一个可以合并,查询的树形集合。它可以用来做分组类型的题。具体功能,拓展和原理 实现: 基本功能的实现: \(1.\)初始化,我们令每一个参加计算的点的父亲设为他自己:即初始时就有\(n\)个集合,每个点就算一个; void
最短路——dijkstra(学习笔记)
摘要:\(dijkstra\) 例题 P4779 【模板】单源最短路径(标准版) 作用: dijkstra是一种用来处理非负边权的单源最短路,在特定情况下,他比其他常用算法都较快。在做图论时有较大用处。 算法原理: \(dijkstra\)运用了贪心的思想;也就是说每一次都找最短的边。其过程是: 1.先定
线段树(学习笔记)
摘要:线段树 例题 一.功能: 线段树可以用来处理区间问题如 “区间和” 虽然区间和可以用前缀和解决,用\(O(1)\) 的复杂度进行查询,但修改需要\(O(n)\)的复杂度。同理差分可以以\(O(1)\)的复杂度进行修改,但需要\(O(n)\)的复杂度进行查询。 所以线段树可以同时用\(O(logn)\