随笔分类 -  AcWing

摘要:1、流网络:存在一个源点,一个汇点,有向边,带边权(容量),假设没有反向边(反向边可以通过加点处理掉) 2、可行流f:(1)满足容量(边权)限制,即流量小于等于容量,且大于等于0,(2)流量守恒:除了源点和汇点,其余点不存储流量(流进多少就流出多少)。 3、可行流的流量|f|:每秒从源点净流出的流量 阅读全文
posted @ 2022-11-02 21:16 80k 阅读(108) 评论(0) 推荐(0) 编辑
摘要:拓展欧几里得算法: 1、模板:https://www.cnblogs.com/ydUESTC/p/16676229.html 2、原理: 3、应用:拓展欧几里得算法解线性同余方程: 4、例题: (1)线性同余方程: https://www.acwing.com/problem/content/205 阅读全文
posted @ 2022-10-03 20:23 80k 阅读(18) 评论(0) 推荐(0) 编辑
摘要:1、基本性质 tree+heap=treap 平衡树包含treap 红黑树 splay sbt AVL等等 splay比较常用 treap= ①BST 二叉搜索树 + ②heap 2、set不能做的操作 ⑤和⑥这种与排名相关的操作比较困难 3、treap的实现 思想:让二叉搜索树尽量变得随机(以大根 阅读全文
posted @ 2022-09-28 19:59 80k 阅读(31) 评论(0) 推荐(0) 编辑
摘要:可持久化的前提:数据结构本身的拓扑结构不变 trie、线段树、树状数组、堆等都可持久化 平衡树(一般)需要左旋和右旋,不可持久化 可持久化希望将数据结构的全部修改记录下来(历史版本) 核心思想:只记录每一个版本与前一个版本不一样的地方 1、可持久化Trie 可以发现,绿线表示同一个点,但是下方的子树 阅读全文
posted @ 2022-09-28 16:14 80k 阅读(88) 评论(0) 推荐(0) 编辑
摘要:1、性质:二分图,等价于不存在奇数环、用染色法染色没有矛盾。 染色法求二分图模板: int n,m; const int N=20010; vector<int> adj[N]; vector<int> cost[N]; int color[N];//0表示未染色,1白色,2黑色 bool DFS( 阅读全文
posted @ 2022-09-20 17:00 80k 阅读(40) 评论(0) 推荐(0) 编辑
摘要:一、定义: 1、极大的不含有桥(割边)的连通块称为边双连通分量。 性质: (1)边双连通分量,不管删掉哪条边,还是连通的 (2)任意两点间都有两条(边)不相交的路径 2、极大的不含有割点的连通块称为点双连通分量。 性质: (1)每个割点至少属于两个点双连通分量 (2)割点和割边没什么关系 二、求解方 阅读全文
posted @ 2022-09-19 16:20 80k 阅读(57) 评论(0) 推荐(0) 编辑
摘要:一般使用kruskal(克鲁斯卡尔)(mlogm) 对于稀疏图,用朴素prim(n^2) prim:每次选择和当前已经构建出的连通块相连,且权重最小的边,加入当前连通块。 一共需要扩展(n-1)次 只能处理一个连通块,不能“生成森林” 例题:https://www.acwing.com/proble 阅读全文
posted @ 2022-09-13 09:54 80k 阅读(51) 评论(0) 推荐(0) 编辑
摘要:主要思路为,在Floyd过程中,找到环中最大值为k的最小环 解释: 以dp的视角看待Floyd算法,在循环到k时,已经获得了经过前k-1个点的最短路径。 设环中最大标号为k,则路径可以表示为:i->k->j->...->i i->k和k->j为直接相连,j->...->i为通过小于标号k的点相连。 阅读全文
posted @ 2022-09-12 19:46 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:并查集初始化为p[i]=i 每次合并时,向右合并 区间大小为sz[find(i)]-1 例题: 2334. 元素值大于变化阈值的子数组 https://leetcode.cn/problems/subarray-with-elements-greater-than-varying-threshold 阅读全文
posted @ 2022-07-13 09:56 80k 阅读(47) 评论(0) 推荐(0) 编辑
摘要:连通分量可以用并查集处理。 连通分量是环的条件可以是:边数等于点数,每个点的度都为2。 例题:AcWing 4493. 环形连通分量 #include<bits/stdc++.h> using namespace std; typedef long long LL; int p[200010]; i 阅读全文
posted @ 2022-07-09 19:43 80k 阅读(51) 评论(0) 推荐(0) 编辑
摘要:单调队列可以求出,区间内的最值。 对于二维的情况,可以先在每一行,用单调队列求出,行方向上的最值。 然后在行方向上的最值的基础上,在每一列,用单调队列求出列方向上的最值。 即可得到二维区间的最值。 例题: 1091. 理想的正方形 代码: #include<bits/stdc++.h> using 阅读全文
posted @ 2022-07-03 20:48 80k 阅读(26) 评论(0) 推荐(0) 编辑
摘要:如果要求子区间中全部数字的平均数大于100,可以先将区间中全部数字都减100,然后再判断区间和是否大于0,这样就可以避免平均数的值和区间长度相关的问题。 例题: AcWing 4487. 最长连续子序列 #include<bits/stdc++.h> using namespace std; typ 阅读全文
posted @ 2022-06-26 19:33 80k 阅读(49) 评论(0) 推荐(0) 编辑
摘要:AcWing 1086. 恨7不成妻 数位dp例题 注意一个数不能分别对两个不同的数取余,只能将其保存下来 例如下面代码中的prev_b #include<bits/stdc++.h> using namespace std; typedef long long LL; LL MOD = 10000 阅读全文
posted @ 2022-06-24 16:15 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:数位DP的一般形式是: 在[X,Y]区间内,找到满足某种性质的数的个数。 技巧1:两端区间变为一边区间,计算[0, X]和[0, Y]在相减 技巧2:以树的方式考虑,从高位到低位,考虑枚举的数的当前位小于还是等于Y的当前位。 AcWing 1081. 度的数量 #include<bits/stdc+ 阅读全文
posted @ 2022-06-19 22:11 80k 阅读(44) 评论(0) 推荐(0) 编辑
摘要:整数部分,不断做除法,并取余数,最后倒置。 小数部分,不断做乘法,并取出整数部分。 例题 AcWing 4484. 有限小数 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL GCD(LL a,LL b) { 阅读全文
posted @ 2022-06-19 11:24 80k 阅读(67) 评论(0) 推荐(0) 编辑
摘要:AcWing 1073. 树的中心 #include<bits/stdc++.h> using namespace std; typedef long long LL; vector<int> adj[10010]; vector<int> w[10010]; int p[10010]; int w 阅读全文
posted @ 2022-06-16 13:02 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:有根树从根、无根树从任意一个节点开始处理即可 1、不考虑边权,考虑路径中点的个数,可以从任意一个节点开始进行DFS,DFS返回以当前节点为根的子树中,以当前节点为端点的最长路径。 经过当前节点的最长路径,即为以当前节点的子节点为端点的前2长的路径长度的和+1,并以此更新全局最长路径(直径)。 2、边 阅读全文
posted @ 2022-06-16 11:52 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:区间dp常用的实现方式有:迭代式和记忆化搜索式。 迭代式可以枚举左右端点,也可以考虑先枚举区间长度,这样小区间就会在大区间之前被计算。大区间通过分界点由小区间转移。 例题 AcWing 282. 石子合并 此题直接枚举区间长度和左端点,右端点不超过n。 AcWing 1068. 环形石子合并 此题可 阅读全文
posted @ 2022-06-14 10:15 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:291. 蒙德里安的梦想 此题使用状态压缩dp进行计算,状态表示使用一个数j,其中j的二进制位为1的位置表示1*2的第一个小方格并向后延伸。 由于1*2的第二个小方格和2*1的任意一个小方格与后面是没有联系的,对于后面的处理是等价的, 所以状态只用表示和后面产生联系的1*2的第一个小方格。 转移方法 阅读全文
posted @ 2022-06-10 10:39 80k 阅读(33) 评论(0) 推荐(0) 编辑
摘要:dp中的状态机模型会增加一维表示当前的状态。根据状态间的转移方式进行dp 1052. 设计密码 此题需要结合kmp和状态机模型 状态的定义是 dp[i][j]表示遍历到字母i,且匹配了长度为j的模板串,匹配模板串的长度即为状态。 状态的转移根据i-1位的匹配长度,以及i位的字母,计算i位的匹配长度。 阅读全文
posted @ 2022-06-08 19:34 80k 阅读(36) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示