寒假训练记录合集
文章平均质量分 68
谪星.
这个作者很懒,什么都没留下…
展开
-
寒假:Day27
Day27二分图问题257. 关押罪犯 - AcWing题库二分图之染色法问题,二分答案,然后用染色法check这个二分图的可行性即可#include<bits/stdc++.h>using namespace std;const int N = 20010, M = 200010;int n, m;int h[N], e[M], ne[M], w[M], idx;int color[N]; // 0表示未染色,1表示白色,2表示黑色void add(int a, in原创 2022-02-07 23:30:46 · 324 阅读 · 0 评论 -
寒假:Day26
Day26有向图的强连通分量1174. 受欢迎的牛 - AcWing题库TarjanTarjanTarjan算法,将一个有向图中的环都缩点,使得这个新图是有向无环图(DAG),每一个点都属于一个强连通分量中,也就是一个环,最后判断下新图中每一个点的出度,如果只有一个出度为0的点,那么答案就是这个连通分量内的所有点,如果有多个出度为0的点,则答案为0#include<bits/stdc++.h>using namespace std;const int N = 10010, M =原创 2022-02-06 13:42:33 · 300 阅读 · 0 评论 -
寒假:Day25
Day25最近公共祖先问题(LCA)1172. 祖孙询问 - AcWing题库LCA模板题#include<bits/stdc++.h>using namespace std;const int N = 40010, M = 2 * N;int n, m;int h[N], e[M], ne[M], idx;int depth[N], fa[N][16]; // depth存每个节点的深度,fa存倍增往前走2^i步到哪个点编号int q[N]; // 数组模拟队列void原创 2022-02-02 22:45:37 · 335 阅读 · 0 评论 -
寒假:Day24
Day24继续图论。346. 走廊泼水节 - AcWing题库Kruskal模板应用,先把每个点看作一个集合,然后从小到大枚举边,每次把两个集合合并时,两个集合互相连边直至成局部完全图即可#include<bits/stdc++.h>using namespace std;const int N = 6010;struct Edge{ int a, b, w; bool operator< (const Edge &t) const {原创 2022-01-30 18:49:35 · 656 阅读 · 0 评论 -
寒假:Day23
Day23最小生成树开搞!1140. 最短网络 - AcWing题库primprimprim 模板题,因为数据量小,而且是以邻接矩阵的方式给出图,所以用 primprimprim 算法更加方便#include<bits/stdc++.h>using namespace std;const int N = 110;int w[N][N];int dist[N];bool st[N];int n;int prim(){ memset(dist, 0x3f, size原创 2022-01-23 23:26:25 · 489 阅读 · 0 评论 -
寒假:Day22
Day22340. 通信线路 - AcWing题库#include<bits/stdc++.h>using namespace std;const int N = 1010, M = 20010;int n, m, k;int h[N], e[M], ne[M], w[M], idx;deque<int> q;int dist[N];bool st[N];void add(int a, int b, int c){ e[idx] = b, w[id原创 2022-01-23 15:28:11 · 193 阅读 · 0 评论 -
寒假:Day21
Day21今天进入图论,为了加快进度,我偏向先自己写,如果写得出来就直接跳过了,写不出来的再去看视频。基础课把这些算法模板都背熟了,提高课直接学习如何建图,这是图论难点。Y总的总结很好用[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XP6JjhcQ-1642483693999)(C:\Users\lenovo\AppData\Local\Temp\1642329881043.png)]1127. 香甜的黄油 - AcWing题库第一次用spfa,代码确实简洁,但是可原创 2022-01-18 13:28:53 · 175 阅读 · 0 评论 -
寒假:Day20
Day20今天把搜索专题弄完,准备进入图论部分!166. 数独 - AcWing题库利用数字的二进制来枚举每一个格子都能填哪些数,先将每一行、每一列、每一个九宫格都初始化成二进制的 111111111111111111111111111 也就是十进制的511,然后如果要用到某一个数字 iii ,那就把二进制上的那一位1变成0,也就是十进制减去 2i2^i2i 即可。利用二进制来枚举表示状态,妙哉!#include <iostream>#include <algorithm>原创 2022-01-15 11:43:34 · 286 阅读 · 0 评论 -
寒假:Day19
Day19今天开始进入搜索,速度提上来!173. 矩阵距离 - AcWing题库求所有0到最近的1,反过来想就是用1去更新到0的每一个距离,因为有多个1,所以就是多源BFS。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;const int N = 1010;char f[N][N];int g[N][N];bool st[N][N];int n, m;queue<原创 2022-01-12 19:45:33 · 133 阅读 · 0 评论 -
寒假:Day18
Day181083. Windy数 - AcWing题库数位DP的题的预处理就含有一定的DP方式,预处理可以让你的个数更好的求出来,而且每一道题不同的条件有不同的预处理方式,这也是数位DP的一个难点#include<bits/stdc++.h>using namespace std;const int N = 11;int f[N][N]; // 剩余i位且最高位是j的Windy数的个数void init(){ for (int i = 0; i < 10; i+原创 2022-01-09 22:43:19 · 348 阅读 · 0 评论 -
寒假:Day17
Day17数位DP数位DP很经典的情况就是问你一段区间内满足某种性质的数的个数,一般如果数据量小的话可以暴搜,但是如果数据范围大了就需要数位DP了1081. 度的数量 - AcWing题库求一段区间满足条件的数的个数,我们可以利用前缀和的思想,求出 dp(x)dp(x)dp(x) 是从 000 到 xxx 满足条件的数,然后答案就能表示为 f(r)−f(l−1)f(r) - f(l - 1)f(r)−f(l−1) ,数位DP的核心思想就是分类讨论,从每一位数字上分类讨论,最后得出结论。#inclu原创 2022-01-07 23:22:46 · 490 阅读 · 0 评论 -
寒假:Day16
Day16479. 加分二叉树 - AcWing题库区间DP套路模板直接做就好,注意时间复杂度即可#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int, int> PII;const int N = 35;int t, n, m;int w[N], f[N][N], g[N][N];void原创 2022-01-06 22:14:05 · 181 阅读 · 0 评论 -
寒假:Day15
Day15继续刷课!加快速度327. 玉米田 - AcWing题库和上一题基本一摸一样,只不过换了个判定条件。但是这个代码实现可以说是很妙了,二进制运用的太好了!#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int, int> PII;const int N = 14, M = 1 <<原创 2022-01-05 23:02:55 · 440 阅读 · 0 评论 -
寒假:Day14
Day14加快进度,不然感觉要刷不完了1058. 股票买卖 V - AcWing题库因为有冷冻期,所以这个时候两个状态已经无法表示出题目意思,这个时候需要三个状态。状态表示={第i天手上有货f[i,0]第i天手上无货第1天f[i,1]第i天手上无货第≥2天f[i,2]状态表示 = \begin{cases} 第i天手上有货 & f[i, 0]\\\\ 第i天手上无货第1天 &f[i, 1]\\ \\第i天手上无货第≥2天 &f[i, 2] \end{cases}状态表示=原创 2022-01-04 23:35:34 · 113 阅读 · 0 评论 -
寒假:Day13
Day13元旦放了自己两天假舒舒服服跨个年,今天继续DP,提速提速状态机模型1049. 大盗阿福 - AcWing题库这道题可以用背包问题的思考方式根据第 iii 家商铺选不选划分集合,状态表示也和背包大径相同:f[i]f[i]f[i] 表示前 iii 家商铺最大价值。不选这家那就是 f[i−1]f[i - 1]f[i−1] ,如果选这一家,那前一家必不选,那么就是 f[i−2]+wf[i - 2] + wf[i−2]+w 很好理解状态划分={选第i家店铺f[i−2]+w不选第i家商铺f[i−1]原创 2022-01-03 23:57:14 · 226 阅读 · 0 评论 -
寒假:Day12
Day12提高课DP背包问题今天赶紧结束!!有依赖的背包问题10. 有依赖的背包问题 - AcWing题库树形DP,利用分组背包思想求每一棵子树的最大价值,然后再加上根节点即可。可以尝试记忆代码!!#include<bits/stdc++.h>using namespace std;const int N = 110;int n, m;int v[N], w[N];int h[N], e[N], ne[N], idx;int f[N][N];void add(int a原创 2021-12-31 20:09:32 · 413 阅读 · 1 评论 -
寒假:Day11
Day11提高课继续,补题从未停止!!关于背包问题的一些问题首先我们必须要清楚它问的是啥:求前 iii 个物品中体积不超过 VVV 的最大价值求前 iii 个物品中体积恰好是 VVV 的最大价值(最小代价)求前 iii 个物品中体积至少是 VVV 的最小代价这里我们以01背包问题,虽然这三种的状态转移方程都大径相同,但是针对不同的问题却有着不同的初始化我们一般是考虑一个不选的情况下有什么不一样的地方,第一个问题 f[0,j]f[0, j]f[0,j] 表示一个都不选且体积不超过 jjj原创 2021-12-30 23:14:51 · 436 阅读 · 0 评论 -
寒假:Day10
Day10提高课DP继续搞!01背包求方案数278. 数字组合 - AcWing题库状态表示还是 f[i,j]f[i, j]f[i,j] 但是却表示:从前 iii 个物品中选,体积为 jjj 的方案数状态转移={不选第i个物品f[i−1,j]选第i个物品f[i−1,j−v]状态转移 = \left\{\begin{matrix} 不选第i个物品 && f[i - 1, j]\\ \\ 选第i个物品 && f[i - 1, j - v]\end{matrix}\r原创 2021-12-29 22:59:53 · 453 阅读 · 0 评论 -
寒假:Day9
Day9昨天晚上的cf教育场变成手速场,直接被教育,C题贪心我贪不出来啊qwq,太菜了!!!补题从未停止!B - Colorful Lines (atcoder.jp)既然前面的会被后面的更新,那么我们就直接倒过来看, 这样就不用去管会不会被覆盖了,然后每次涂完一行或一列就标记上#include<bits/stdc++.h>using namespace std;using LL = long long;int main(void){ ios::sync_with_st原创 2021-12-28 23:43:37 · 362 阅读 · 0 评论 -
寒假:Day8
Day8明天再看提高课DP,今天先把比赛的题补一下A - Permutation Grid (atcoder.jp)通过判断 r[x]+c[y]>n?r[x] + c[y] > n?r[x]+c[y]>n? 即可特别有意思的思维题,感觉就是那种你没见过就写不出来的题,我当时拿到的时候写不出来,但是我有很强烈的预感就是这肯定就是一个判断的事,但是为什么是这个结论,我也没想明白,另外我发现看大佬的代码可以学到很多东西,感觉大家的编码习惯很不相同,但是他们的编码方式明显比我的更快,肯定是原创 2021-12-28 00:21:33 · 328 阅读 · 0 评论 -
寒假:Day7
Day7今天啥也没干本来说今天搞提高课背包,结果根本看不下去,啥也没干也不知道写啥,那就乘机回顾这一个星期和规划下接下来的寒假吧寒假的目标基础课复习完,提高课刷完算法的基本储备必须有,之前主攻数论方向,但是打了场ICPC上海站发现自己根本摸不到数论,要么签到,要么防AK,而且上次有好几道DP,我就只能眼睁睁看着队友搞,这样不行,所以我就赶紧把提高课的其他算法都精通下,到时候把题量刷上来,题见多了自然就豁然开朗了,这个目标必达成,不达成我直接原地退役cf和atcode的题得多刷刷ICPC网络赛和原创 2021-12-26 22:22:54 · 289 阅读 · 0 评论 -
寒假:Day6
Day6最长公共子序列状态表示:f[i,j]f[i, j]f[i,j] 所有从 A[1.....i]A[1.....i]A[1.....i] 与 B[1.....j]B[1.....j]B[1.....j] 的公共子序列的集合集合划分={A[i]包含,B[j]包含(f[i−1,j−1]+1)A[i]包含,B[j]不包含(f[i,j−1])A[i]不包含,B[j]包含(f[i−1,j])A[i]不包含,B[j]也不包含(f[i−1,j−1])集合划分=\left\{ \begin{matrix} A[原创 2021-12-25 22:53:09 · 626 阅读 · 0 评论 -
寒假:Day5
Day5今天开始刷提高课的全部内容,把之前一些遗忘的没搞明白的都抓一抓,还有就是把cf的题都补一补!带权值的并查集经典例题:240. 食物链 - AcWing题库通过维护子节点到根节点的距离来维护两个点之间的其他关系,通过对3取模即可,妙哉!学习代码实现#include<bits/stdc++.h>using namespace std;const int N = 50010;int d[N], p[N], n, m;int find(int x) { if (x原创 2021-12-24 22:55:59 · 100 阅读 · 0 评论 -
寒假:Day4
Day4今天继续复习搞基础课,加油!树形DP每一个节点都分为选和不选两种状态,选为f[i, 1],不选为f[i, 0],每一个节点想要最大,他的每一个子树权值都必须最大,递归即可不选择根节点的最大值:f[i,0]=max(f[s1,0],f[s1,1])+max(f[s2,0],f[s2,1])+...+max(f[sk,0],f[sk,1])f[i, 0] = max(f[s1, 0], f[s1, 1]) + max(f[s2, 0], f[s2, 1]) +...+ max(f[sk, 0原创 2021-12-23 21:03:58 · 399 阅读 · 0 评论 -
寒假:Day3
Day3第三天打卡,今天是背包专题完全背包问题一个物品可以选多次,那么我们在状态转换的时候就不能单纯的分为选和不选,而是分为不选,选一个,选两个…一直倒装不下,那么我们的状态转移方程就会变成:f[i , j] = max(f[i - i , j], f[i , j - v] + w, f[i , j - 2v] + 2w, f[i , j - 3v] + 3w …)如果不进行优化,那么就得多写一重循环来求max,时间复杂度变成O(n^3)f[i, j - v] = max(f[i - 1, j原创 2021-12-22 21:15:49 · 71 阅读 · 0 评论 -
寒假:Day2
Day2第二天打卡,昨天晚上打cf的div3场,前面的AB出的很快,但是在C题的字符串模拟卡住了,也不是没有思路,而是不能模拟的边界一直没搞清楚,也没动笔一直光靠脑子想,所以下次一定要注意。今天继续回顾算法基础模板KMP之前只是懂思路,没有了解代码实现,今天通透了,其实KMP的next数组很类似于动态规划当中的递推,预处理next数组就是子串和子串自己的配对过程,以此递推出KMP#include<bits/stdc++.h>using namespace std;const int原创 2021-12-21 22:12:29 · 176 阅读 · 0 评论 -
寒假:Day1
Day1寒假第一天头必须起好了,冲冲冲今天熟悉回顾基础算法二分回顾基础算法模板,发现了关于二分,我之前是没有看过模板的,基本都是知道二分思想根据题意现写的代码,很容易死循环,现在重新听了Y总讲的模板,发现了自己的一个盲区,关键就是这个l + r >> 1 还是 l + r + 1 >> 1// 把区间[l, r]分为[l, mid]和[mid + 1, r]时使用bool check(int x) {...} // check函数int bisearch_1(int原创 2021-12-20 20:08:05 · 338 阅读 · 0 评论