算法
文章平均质量分 83
伍叁壹_
这个作者很懒,什么都没留下…
展开
-
线段树 整理笔记
p.s. 代码块缩进有问题,但不影响正常阅读,请忽略。P4513 小白逛公园:区间询问 + 单点修改。对于询问区间内最大连续权值和,按照套路,维护 ti.lmaxt_i.lmaxti.lmax 与 ti.rmaxt_i.rmaxti.rmax,注意在查询的时合并答案要分情况。具体地,看代码吧(实在描述不来): 区间乘 + 区间加 + 区间查询 P2023 [AHOI2009] 维护序列:模板。线段树乘法不过是多加了一个乘法懒标记,维护的时候复杂了些。 区间除法 [雅礼集训 2017原创 2022-07-07 13:47:12 · 119 阅读 · 0 评论 -
(动态)树分治 学习笔记
浅谈一下学了好久的树分治。适合处理大规模树上路径信息问题。P3806 【模板】点分治1很基础的了,询问树上距离为 kkk 的点对是否存在。大概就是每次找重心当作根,对于当前的根,统计每个子节点到它的距离,然后用双指针遍历,当且仅当两个儿子到当前根的距离之和为 kkk 且来自根的不同子树时,这两个子节点的距离就为 kkk,那么距离为 kkk 的点对存在。 另一道类似的升级题:P4178 Tree。题意变为求出树上两点距离小于等于 kkk 的点对数量。思路差不多,不过是在遍历统计答案的时候使用双指针统计答案,即原创 2022-06-30 15:38:51 · 239 阅读 · 0 评论 -
动态树之 Link Cut Tree (做题记录)
LCT 题单做题记录 一、维护链信息 P3203 [HNOI2010]弹飞绵羊:维护一条路径的长度,由于题目大大降低了难度,所以只需要使用 accessaccessaccess 和 splaysplaysplay 两个操作即可。要学会灵活应用 LCT 中的函数,不要有刻板思维(如改变 cutcutcut 函数的写法)。 P1501 [国家集训队]Tree II:需要维护加标记、乘标记和翻转标记三个 lazytaglazytaglazytag。pushdownpushdownpushdown 时,先处原创 2022-05-18 13:35:04 · 109 阅读 · 0 评论 -
P4722 【模板】最大流加强版 / 预流推进
本题解侧重解释 HLPP\text{HLPP}HLPP 细节部分,而对于 HLPP\text{HLPP}HLPP 的详细思路等不会过多阐述。 HLPP\text{HLPP}HLPP 思路 按照众多大佬所说的那样,HLPP\text{HLPP}HLPP 就是将水流自源点一步一步地推到其他中转点,最后推向汇点,汇点累计的流量就是该网络的最大流。 注意,在此算法中,我们的目标是图中所有中转点最后存储的流量为 0。 在此过程中,为了防止 TLE\text{TLE}TLE,也就是避免两个点互相不停地将水流推来推去的情原创 2022-03-19 08:23:37 · 244 阅读 · 0 评论 -
主席树(可持久化线段树)
前言 真不是有目的地学习主席树的…(实在是因为它太上头了) 《关于我某天第二节晚修一直在看<进阶指南>可持久化数据结构这章然后学了主席树这件事》 所以新学一个数据结构只要一整节晚修。 主席树 也叫可持久化线段树、函数式线段树。其思想与可持久化 Trie\mathtt{Trie}Trie 相似。 其实,就是在普通线段树的基础上,修改了一下 update\mathtt{update}update 操作,使得它成为可持久化数据结构: 每次新建一个根节点,保存此次修改之后的状态。在遍历线段树的时候,对更原创 2022-03-19 08:17:27 · 140 阅读 · 0 评论 -
贪心应用总结
前言 定义 所谓贪心选择是指应用同一规则,将原问题变为一个相似的但规模更小的子问题, 而后每一步都是当前看似最佳的选择, 且这种选择只依赖于已做出的选择,不依赖于未做出的选择。 依赖于未做出选择的,是 dp。 做题 对于贪心,当然是多刷刷题,知道这一类型的题目和做法。 在比赛考试的时候遇到贪心题目,一般都是问最大最小值。 推的时候,一定要注意排序方式是什么。 例如,在选择不相交区间问题时,是按结束时间早晚进行排序,而不是开始时间。 如果实在没注意到错了,写完之后出样例测试,静下来思考。 如果有 dfs(递归原创 2022-02-12 16:39:20 · 544 阅读 · 0 评论 -
各类运算符总结
1、AND & 与运算 当同位都为 1 时,才为 1,否则都是 0。 1 & 1 = 1; 1 & 0 = 0; 0 & 0 = 0。 2、XOR ^ 异或运算 只有同位都不一样,才为 1,否则都是 0。 1 ^ 0 = 1; 1 ^ 1 = 0; 0 ^ 0 = 0。 3、OR | 或运算 只要同位有 1 即为 1,否则都是 0。 1 | 1 = 1; 1 | 0 = 1; 0 | 0 = 0。 4、~ 按位取反 同位取反,1 变 0,0 变 1。 1100 1001 =原创 2022-02-12 16:38:37 · 277 阅读 · 0 评论 -
单调队列用法整理
双端队列 + pair pair 类型的变量下可以直接进行比较。 在不同 pair 的比较中,自动把 x.first 当作第一关键字,x.second 当作第二关键字。 1 定义队列 deque <pair <int, int> > q; 2 定义 pair pair <int, int> nw = make_pair (x, y); 3 前端、后端插入 q.push_back (make_pair (x, y)); q.push_front (make_pair (x,原创 2022-02-12 16:37:19 · 228 阅读 · 0 评论 -
强连通分量算法学习笔记
强连通分量 更好阅读体验请点击此链接 先推荐几道综合性较强的题目,详细题解我写了,持续更新中。 我的博客:整理 + 题解 P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G P2272 [ZJOI2007]最大半连通子图 强连通分量( strongly connected components ),可以理解为存在一条回路使得初始点又能回到初始点。 有两种算法, 这里分享的是 Tarjan (我用前向星存图)。 1. 基本概念: Tarjan 基于对图深搜的算法,每个强连通分量为搜原创 2022-02-12 16:36:11 · 592 阅读 · 0 评论 -
缩点算法学习笔记
缩点 说说缩点,缩点可以算是强连通分量的一个小小的进阶。 本博客也可以理解为 P3387 【模板】缩点 - 传送门 的题解。 正片开始—— 一 题目分析 求有向图上的一条路径,使该路径上点的权值和最大,输出和的最大值(可以重复经过点和边)。 啊当然了,你可以使用 spfa 或者 dijkstra 以 ac 这道题,这里说说缩点的方法。 首先,对于任何一个强连通分量里面,我们可以拿到所有的权值,所以我们将所有 的强连通分量缩成一个个“超级点”,最后找到一条类似链的路径使这条“链”的权值最大。 缩点,是我们在原创 2022-02-12 16:34:42 · 373 阅读 · 0 评论 -
割点割边 + 点双边双 学习笔记
割点 定义 在一个无向图(强连通分量仅针对有向图)中,若去掉一个点 u,该图有两点不连通,则称点 u 为割点。 点连通度:该连通(且无向)图的割点数量。 求割点 对于点 u: u 为一个根节点(把图看成树):因为他是根节点,所以它的入度为 0,那么只要它有两个及以上的孩子,那么它就是割点(去掉它了会有两个以上的连通块),chil>1chil>1chil>1。 u 为子节点:若它的子节点 v 不能够不通过 u 连到 v 的边到 u 的祖先,则只有加上从 u 到 v 的边才能让 v 到原创 2022-02-12 16:33:22 · 602 阅读 · 0 评论 -
KMP算法学习笔记
怎么突然从图论跳到字符串了。。。 UPDATE 2021 - 08 - 23 KMP 练习题: P3435 [POI2006]OKR-Periods of Words P3426 [POI2005]SZA-Template 题解博客:P3426 [POI2005]SZA-Template (题记) P4391 [BOI2009]Radio Transmission 无线传输 P2375 [NOI2014] 动物园 定义 KMP 算法是用来处理字符串匹配问题的。 话说这个算法名还是提出它的三个人的姓首字母拼成原创 2022-02-12 16:32:26 · 241 阅读 · 0 评论 -
分块练习整理
定义 分块,无非就是将长为 nnn 的序列分为长度为 n\sqrt{n}n 的若干小块,以每次处理或查询时提高效率。说白了就是优雅的暴力。 块内排序 一、Problem G: [loj6278]数列分块入门 2 给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间加法,询问区间内小于某个值 xxx 的元素个数。 思路 考虑到查询,就要使块内有序,即维护块的单调性。 预处理:逐一对块内排序,复杂度 O(nlogn)\text{O(nlogn)}O(nlogn)。 所以修改: 散块:暴力,逐一原创 2022-02-12 16:31:05 · 195 阅读 · 0 评论 -
二分图及相关问题整理
计算无权二分图的最大匹配 匈牙利算法 给定一个二分图,其左部点的个数为 nnn,右部点的个数为 mmm,边数为 eee,求其最大匹配的边数。 左部点从 1 至 nnn 编号,右部点从 1 至 mmm 编号。 法1: 枚举每一个左部点 uuu,然后枚举该左部点连出的边,对于一个出点 vvv,如果它没有被先前的左部点匹配,那么直接将 uuu 匹配 vvv,否则尝试让 vvv 的“原配”左部点去匹配其他右部点,如果“原配”匹配到了其他点,那么将 uuu 匹配 vvv,否则 uuu 失配。(摘自扶苏题解) #inc原创 2022-02-12 16:29:33 · 366 阅读 · 0 评论 -
网络流【网络最大流 + 最小网络最大流】
一、网络最大流 (从学委那里拿的动图。) Dinic\text{Dinic}Dinic /* Dinic 在残留网络和 EK 的基础上,按照源点到该点的距离进行分层,每次寻找增广路径时, 保证每次都是从一层走到下一层。每次可寻找到多条增广路径 */ #include<bits/stdc++.h> using namespace std; #define int long long #define maxn 205 #define maxm 10005 #define rep(i,原创 2022-02-12 16:26:23 · 611 阅读 · 0 评论