摘要:
网络流是什么? 网络流是 OI 图论中的内容,比较有用的是网络最大流与费用流。 网络流就像一个复杂的水网,它有一个源点 \(S\),可以供应无穷无尽的水,有一个汇点 \(T\),要让水从源点流到汇点,我们就连上了许多水管,也就是边,中间有一些中转站连接不同的水管,也就是点,每条水管都有一个流量上限, 阅读全文
摘要:
并查集是算法竞赛中常用的一种数据结构。 它可以高效地处理集合之间的操作与询问。 其主要功能是查询两个元素是否在同一个集合以及将两个集合合并。 第一部分 并查集的基本操作 算法思想 我们将所有元素建成很多棵树(森林),每一棵树就是一个集合。 因为并查集是一个树结构,那么每个节点都有一个指针指向父节点。 阅读全文
摘要:
第一部分 按值分裂的 FHQ-Treap 按值分裂的 FHQ-Treap 的典型例题是P3369 【模板】普通平衡树。 思路 FHQ-Treap 是什么? FHQ-Treap 是二叉搜索树的一种。 比如: FHQ-Treap 的思想是什么? 分裂->操作->合并 下面我们就来慢慢讲这些操作。 分裂 阅读全文
摘要:
P3369 【模板】普通平衡树 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 100010, INF = 1e9; struct Node { int ch 阅读全文
摘要:
点分治,重心分治。 使用场景:树上大量路径统计问题。 算法原理: 按照重心划分树,可以使划分的时间复杂度 \(O(\log n)\)。 分治的思想在于,讨论每一棵子树时,经过或者不经过根节点。 P3806 【模板】点分治1 题意 给定一个带权无向图,问树上有多少点对之间距离 $ = k$ 。 思路 阅读全文
摘要:
以一道题来说明何谓根号分治。 P3396 哈希冲突 如果对于每个操作进行暴力求解,即从 \(y\) 开始不断累加 \(x\)。单次询问时间复杂度: \(O(n)\),总时间复杂度 \(O(nm)\)。 可以预先处理好每个询问的结果,即用上一步的方法计算后将结果保存下来,用 $f[i][j] $ 表示 阅读全文
摘要:
普通线段树 P3372 【模板1】线段树1 使用线段树进行维护。 #include <iostream> #include <cstring> #include <algorithm> #define int long long using namespace std; const int N = 阅读全文
摘要:
AC自动机 (Aho-Corasick Algorithm)。 AC自动机是多模匹配算法,在一个文本串 \(T\) 中查找多个不同的模式串 \(S\)。 多模匹配问题:给定一个长为 \(n\) 的文本 \(S\), 以及 \(k\) 个平均长度为 \(m\) 的模式串 \(P_1, P_2, \do 阅读全文
摘要:
P3390 【模板】矩阵快速幂 矩阵乘法: \(c_{i,j} = \sum a_{i,k} * b_{k,j}\) 矩阵快速幂:与普通快速幂类似。 特殊地,定义 \(A^0\) 为单位矩阵 \(I = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \c 阅读全文
摘要:
P3812 【模板】线性基 题目描述 给定 \(n\) 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。 提示 \(1 \leq n \leq 50, 0 \leq S_i < 2 ^ {50}\) 注意开long long #include <iostream> #inclu 阅读全文