摘要:
用处 快速查询一个数是否可以被一堆数异或出来 快速查询一堆数可以异或出来的最大 / 最小值 快速查询一堆数可以异或出来的第 \(k\) 大值 性质 原数列里的任何一个数都可以通过线性基里的数异或表示出来 线性基里任意一个子集的异或和都不为 \(0\) 一个数列可能有多个线性基,但是线性基里数的数量一 阅读全文
摘要:
行列式 \(\det(A)=\sum_{\sigma\in S_n}\operatorname{sgn}(\sigma)\prod_{i=1}^na_{i,\sigma(i)}\) 其中 \(S_n\) 是指长度为 \(n\) 的全排列的集合,\(\sigma\) 就是一个全排列,如果 \(\sig 阅读全文
摘要:
转对偶图 Lid , Rid 分别是每条边左右的区域的编号; to[x],fr[x] 分别是 \(x\) 指出去和指向 \(x\) 的边 (从左往右排列); void build(){ static queue <int> Q; Q.push(S); while(!Q.empty()){ int x 阅读全文
摘要:
树上问题 有向无环图 DAG 连通性相关 2-sat 平面图 网络流 Prufer 序列 阅读全文
摘要:
最小链覆盖 (最长反链) 最小链覆盖 \(=n-\) 最大匹配。 考虑首先每个点自成一条链,此时恰好有 \(n\) 条链,最终答案一定是合并(首尾相接)若干条链形成的。 将两点匹配的含义其实就是将链合并。 说明 Dilworth 定理:一个偏序集中的最长反链大小,等于其中最小不可重链覆盖大小。 对于 阅读全文
摘要:
该算法的一大判断依据,DP 不可做 or 状态高,数据范围适合网络流。 最大流 Dinic 的实现 int S, T, ecnt = 1, head[N], cur[N], dep[N]; struct edge{ int nx, to, v; } e[M * 2]; inline void add 阅读全文
摘要:
线段树的应用 很多可以支持合并的信息都可以维护,如 树的区间直径。 阅读全文
摘要:
一种可以 高效处理 \(k\) 维空间信息 的数据结构。 在正确使用的情况下,复杂度为 \(O(n^{1-\frac{1}{k}})\). K-D Tree 的实现 建树 随机一维选择最中间的点为当前子树的根,每个节点维护当前点的坐标,已经整个子树的矩形坐标。 Pink Rabbit 说随机选维度没 阅读全文
摘要:
Hash 的思想 Hash 的核心思想在于,将输入映射到一个值域较小、可以方便比较的范围。 这里的 “值域较小” 在不同情况下意义不同。 在哈希表中,值域需要小到能够接受线性的空间与时间复杂度。 在字符串哈希中,值域需要小到能够快速比较。 同时,为了降低哈希冲突率,值域也不能太小。 Hash 的实现 阅读全文
摘要:
实现 void ins(int c){ int np = ++dcnt, p = lst; lst = np; t[np].len = t[p].len + 1, t[np].eps = 1; while(p && !t[p].ch[c]) t[p].ch[c] = np, p = t[p].fa; 阅读全文