随笔分类 -  before 2025.8

摘要:往年DP考的挺多特来康康 阅读全文
posted @ 2025-07-14 19:43 流氓兔LMT 阅读(9) 评论(0) 推荐(0)
摘要:马上又是一年新赛季 提前看看往年考点 在此先挖个坑,以后慢慢填 阅读全文
posted @ 2025-07-14 19:38 流氓兔LMT 阅读(21) 评论(0) 推荐(0)
摘要:#include <bits/stdc++.h> #define N 100005 #define inf 1000000000 using namespace std; struct Edge { int v, next; int u; } edge[N]; int tot, head[N]; i 阅读全文
posted @ 2025-05-28 19:36 流氓兔LMT 阅读(10) 评论(0) 推荐(0)
摘要:防止以后复习时忘掉 #include<bits/stdc++.h> using namespace std; struct Tree { int ch[2], fa, val, size; } tree[40001]; int n, X, root; int tot, lef_root, rig_r 阅读全文
posted @ 2025-05-26 18:44 流氓兔LMT 阅读(18) 评论(0) 推荐(0)
摘要:算法原理 分块排序:和普通莫队算法一样,先将数列分成大小约为\(\sqrt{n}\)的块,然后对查询区间按照左端点所在的块进行排序,如果左端点在同一个块内,则按照右端点从小到大排序。 分块处理:对于左端点在同一个块内的所有查询区间,以该块的右端点为基准,将查询区间的处理分为两部分: -对于左端点和右 阅读全文
posted @ 2025-02-28 13:39 流氓兔LMT 阅读(82) 评论(0) 推荐(0)
摘要:分块:将整个数列按照一定的块大小进行划分,一般块的大小为 \(\sqrt{n}\),其中\(n\)是数列的长度。这样可以将数列分成若干个小块,每个小块内部的元素具有一定的连续性。 排序查询区间:对于给定的多个查询区间,按照一定的规则进行排序。通常的排序规则是先按照左端点所在的块进行排序,如果左端点在 阅读全文
posted @ 2025-02-28 09:46 流氓兔LMT 阅读(21) 评论(0) 推荐(0)
摘要:初始化失配指针: 根节点的失配指针指向自身。 根节点的所有子节点的失配指针指向根节点。 对于其他节点,使用广度优先搜索(BFS)的方式逐层计算失配指针。对于一个节点u,假设其父节点为p,且从p到u的边对应的字符为c,则找到p的失配指针所指向的节点q,如果q有字符c对应的子节点v,则将u的失配指针指向 阅读全文
posted @ 2025-02-28 07:37 流氓兔LMT 阅读(22) 评论(0) 推荐(0)
摘要:操作 插入操作:从根节点开始,对于要插入的字符串中的每个字符,检查当前节点的子节点中是否存在该字符对应的边。如果存在,则沿着该边移动到下一个节点;如果不存在,则创建一个新的节点,并建立当前节点到新节点的边,边对应着当前字符。重复这个过程,直到字符串的所有字符都被处理完,最后在代表完整字符串的节点上做 阅读全文
posted @ 2025-02-27 20:58 流氓兔LMT 阅读(21) 评论(0) 推荐(0)
摘要:流程 统计元素出现次数:遍历待排序数组,对于每个元素,在计数数组的对应位置上增加计数。 计算前缀和:对计数数组进行前缀和计算。前缀和数组中的每个元素表示小于等于该下标的元素在原数组中出现的总次数。 输出排序结果:倒序遍历待排序数组,根据计数数组中的前缀和信息,确定每个元素在排序后数组中的位置,并将其 阅读全文
posted @ 2025-02-27 20:31 流氓兔LMT 阅读(14) 评论(0) 推荐(0)
摘要:二分图及相关概念 二分图:又称二部图,是一种特殊的图结构,其顶点集可以被划分为两个互不相交的子集和,并且图中所有的边都连接着中的顶点和中的顶点,和内部没有边。 匹配:在二分图中,匹配是指一组边的集合,其中任意两条边都没有公共顶点。 最大匹配:是指在所有可能的匹配中,边数最多的匹配。 实现步骤 初始化 阅读全文
posted @ 2025-02-27 20:18 流氓兔LMT 阅读(36) 评论(0) 推荐(0)
摘要:用于在字符串中寻找最长回文子串的高效算法 Manacher 算法的核心思想是利用已经计算出的回文子串的信息来加速后续的计算。它通过在原始字符串的每个字符之间插入一个特殊字符(通常用#),将奇数长度和偶数长度的回文子串统一处理,使得每个回文子串都以一个字符为中心对称。 #include<bits/st 阅读全文
posted @ 2025-02-27 19:52 流氓兔LMT 阅读(25) 评论(0) 推荐(0)
摘要:由一个键值二元组 \((k,w)\) 构成。要求 \(k\)满足二叉搜索树的性质,而\(w\) 满足堆的性质。 Treap 是笛卡尔树的一种,Treap 的 \(k\) 是随机的 始终维护右链。 #include <bits/stdc++.h> using namespace std; const 阅读全文
posted @ 2025-02-27 18:18 流氓兔LMT 阅读(22) 评论(0) 推荐(0)
摘要:二维线段树可以维护二维表的信息,(区域和、区域最值等) 内层树和普通线段树一样 #include <bits/stdc++.h> using namespace std; const int N = 1e3 + 5; int n, m; int s; int sum[N][N]; // 外区间查询 阅读全文
posted @ 2025-02-27 15:52 流氓兔LMT 阅读(29) 评论(0) 推荐(0)
摘要:Tarian 一遍,标记割边。记录 eDCC(边双联通分量)将 eDCC 缩点。 得到一棵树,树边就是原图的割边。 观察发现.最少需要加(sum+1)/2条边.可以使整个图变为边的双连通图。sum 为缩点后叶节点的个数。 板子 int dfn[N], low[N], tim, dcc[N], cnt 阅读全文
posted @ 2025-02-26 19:30 流氓兔LMT 阅读(18) 评论(0) 推荐(0)
摘要:割边:对于一个无向图,如果掉一条边后图中的连通块个数增加了. 则称这条边为桥或者割边。 割边判定法则: 当搜索树上存在 × 的一个子节点 y. 满足 low[y]>dfn[x], 则 (x.y)这条边 就是割边。 板子 #include <bits/stdc++.h> using namespace 阅读全文
posted @ 2025-02-26 18:53 流氓兔LMT 阅读(43) 评论(0) 推荐(0)
摘要:割点判定法则: 如果× 不是根节点。 当搜索树上存在 ×的一个子节点 y。 满足 $low[y]≥dfn[×]$, 那么 × 就是割点。 如果×是根节点。 当搜索树上存在至少两个子节点 满足上述条件。 那么 x就是割点。 板子 #include <bits/stdc++.h> using names 阅读全文
posted @ 2025-02-26 16:29 流氓兔LMT 阅读(13) 评论(0) 推荐(0)
摘要:2-SAT,简单的说就是给出 n 个集合,每个集合有两个元素,已知若干个 <a,b>,,表示 a 与 b 矛盾(其中 a 与 b 属于不同的集合)。然后从每个集合选择一个元素,判断能否一共选 n 个两两不矛盾的元素 把每个变量看成点,把n 个点拆成 2n 个点, 即把 x_i 拆成i 和 i + n 阅读全文
posted @ 2025-02-26 15:54 流氓兔LMT 阅读(34) 评论(0) 推荐(0)
摘要:倍增法的核心在于预处理每个节点向上2^k步所能到达的祖先节点,其中k是非负整数。这样,当查询两个节点的LCA时,可以快速地将两个节点跳到同一深度,然后再一起向上跳,直到找到它们的LCA。 板子 #include<bits/stdc++.h> using namespace std; const in 阅读全文
posted @ 2025-02-26 14:09 流氓兔LMT 阅读(20) 评论(0) 推荐(0)
摘要:费用流 给定一个网络G = (V,E), 每条边有容量限制c(u,v), 还有单位 流量的费用w(u,v)。 当(u,v)的流量为f(u,v)时. 需要花费f(u,v) × w(u,v)的费用。 该网络中总花费最小的最大流称为最小费用最大流,总花费最大 的最大流称为最大费用最大流,二者合称费用流模型 阅读全文
posted @ 2025-02-26 11:00 流氓兔LMT 阅读(62) 评论(0) 推荐(0)
摘要:Dinic 算法 一次可以累加多条增广路的流量 表头 head[u]:存u 点的第一条出边 深度 dep[u]:存u 点所在的图层 当前弧 cur[u]:存u 点的当前出边 bfs0对点分层,找增广路 dfs() 多路增广 (1) 搜索顺序优化 (分层限制搜索深度) (2)当前弧优化 (剪枝) (3 阅读全文
posted @ 2025-02-26 09:38 流氓兔LMT 阅读(29) 评论(0) 推荐(0)