随笔分类 -  Codeforces

摘要:WA 了十几发,清醒了之后发现自己是个 sb。 首先肯定贪心选,让每条链尽量长即可。 最后直接跑个欧拉回路即可(两个点的欧拉回路(ˉ▽ˉ;)...)。 分析一下,发现两个点的度数一定满足要求,无非就是是否联通。 那么如果两个点之间没有连边并且两个点都有自环,那么就会不连通。 只需要考虑这种特殊情况就 阅读全文
posted @ 2023-08-09 20:14 A_zjzj 阅读(23) 评论(0) 推荐(0) 编辑
摘要:做了半天,然后打开题解发现里面全是 O(n3)/O(n2) 的。 然后我的原来 O(n5) 的前缀 max 优化成 O(n4) 的就非常🤡。 为了区分 [l,r] 中的 l 和第 i 个线段的长度 li,令 bi 表示第 i 个线段的长度。 # 阅读全文
posted @ 2023-08-07 18:06 A_zjzj 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题很简单,一遍写对却比较困难。 犯的错误: - 预处理 basei 时应该要处理到 max{n,m}; - 去重的时候(reduce 函数)特判 m=1,2。 ### 代码 ```cpp #include using namespace std; using ll=long 阅读全文
posted @ 2023-07-28 20:24 A_zjzj 阅读(6) 评论(0) 推荐(0) 编辑
摘要:写到一半发现标签有二分图就不对劲了,题解区里都是欧拉回路。 然而我是随机化+模拟网络流!~~自豪~~ 首先可以先建模,观察同一种颜色,发现每一行或每一列的限制即为 t2xt2。 然后套路地把横 阅读全文
posted @ 2023-07-28 17:59 A_zjzj 阅读(17) 评论(0) 推荐(0) 编辑
摘要:妙妙题。 首先可以有一个 O(kn2) 的 dp,但是显然不行。 但是,发现其中的大多数转移都浪费在自环上了,所以考虑不要这个东西。 这个 dp 一共有三种转移: 1. 左右端点一起向内移动一格; 2. 左端点或右端点单独移动; 3. 左右端点都不动。 所以考虑加一维 k 表示走了 k 阅读全文
posted @ 2023-07-24 19:32 A_zjzj 阅读(25) 评论(0) 推荐(0) 编辑
摘要:这类问题大概长这样: 求一个排列 p1n,最小(大)化如下值: $$ \sum\limits_{i=1}^{n-1}f(p_i,p_{i+1})\\ f(i,j)= \left\{ g(i)+h(j),ij \r 阅读全文
posted @ 2023-07-22 14:31 A_zjzj 阅读(43) 评论(0) 推荐(0) 编辑
摘要:警告: - 注意区分【强连通分量】,【边双联通分量】,【点双连通分量】。 思考: - 之前没有做到过边双连通分量的拆解; - 一个边双联通分量可以看作一个基环上不断加一条链; - 注意,这里加的链首尾可以为同一个位置。 到这步代码就好弄了。 ### 代码 ```cpp #include using 阅读全文
posted @ 2023-07-21 13:05 A_zjzj 阅读(13) 评论(0) 推荐(0) 编辑
摘要:借鉴了一下 namelessgugugu 的想法,妙妙题。 [link](https://www.luogu.com.cn/blog/namelessgugugu/solution-cf1842g) 这个神奇工具的构造确实挺妙的,非常好的思维题,在此记录一下 ### 代码 ```cpp #inclu 阅读全文
posted @ 2023-07-20 09:51 A_zjzj 阅读(39) 评论(0) 推荐(1) 编辑
摘要:计数好题。 首先对于每个连通块独立考虑,最后合并答案。 发现 点数超过 1 的强连通分量一定删不掉。 - 若连通块中存在 点数超过 1 的强连通分量 - tarjan 缩点之后,称这些点数超过 1 的强连通分量为关键点; - 那么两关键点之间的点也不能删; - 于是对于剩下的点直接 dp 即可,由于 阅读全文
posted @ 2023-07-16 22:51 A_zjzj 阅读(5) 评论(0) 推荐(0) 编辑
摘要:发现根节点一定是 1,所以考虑两边的子树深度,然后发现只需要考虑一段后缀或前缀的深度即可。 所以循环位移后,可以从中间往两边构建笛卡尔树,实时维护深度即可。 ### 代码 ```cpp #include using namespace std; using ll=long long; const 阅读全文
posted @ 2023-07-14 12:37 A_zjzj 阅读(35) 评论(0) 推荐(0) 编辑
摘要:太久没见过启发式合并了,然后没想出做法。 首先笛卡尔树建出来。 然后直接枚举跨过 mid 的长度为 amid 的区间,RMQ O(1) 验证即可。 发现这样的区间个数不超过左右区间大小的较小值,时间复杂度:O(nlogn)。 ### 代码 ```cpp #include u 阅读全文
posted @ 2023-07-14 12:15 A_zjzj 阅读(11) 评论(0) 推荐(0) 编辑
摘要:### 解题思路 容易想到从小到大加数,维护每个点的子树大小。 可转化为维护每个点为 max 时的 [L,R] 区间。 然后需要写一个支持 【区间+1】、【区间取min】、单点加入、全局查询。 上个吉司机线段树即可。 ### 注意点 - 吉司机线段树下推 fi 的标记的时候要注意 $f 阅读全文
posted @ 2023-07-13 21:48 A_zjzj 阅读(31) 评论(0) 推荐(0) 编辑
摘要:需要保持: - 写代码前先仔细考虑一下细节,分类讨论清楚再开始码。 警告: - namespace 里面写了个 n,想调用全局 n 的时候没加 2*冒号。 思路大概就是分类讨论然后计数就完事了。 ### 代码 ```cpp #include using namespace std; using ll 阅读全文
posted @ 2023-07-12 20:26 A_zjzj 阅读(10) 评论(0) 推荐(0) 编辑
摘要:赛时想写 60pts,结果 cxr 似乎少算了一点空间,导致我一直没把空间卡过去QWQ。 当时不会 dfs 求 topo 序,这里讲一下。 枚举所有非访问过的点依次 dfs,每次进行下列操作: - 找出 v 的一个未访问过的入点 u,调用 `dfs(u)`; - 找不到 u 的时候,把 阅读全文
posted @ 2023-07-12 13:53 A_zjzj 阅读(22) 评论(0) 推荐(0) 编辑
摘要:[link](https://www.luogu.com.cn/problem/CF1601F) 这里提供一种不用 meet in middle 的方法,速度比较可观。 > 模拟赛上场切了,但是数组不清空,爆成 50pts 了,QWQ #### 发现性质 开始简单的推一下式子。 $\sum (i-a 阅读全文
posted @ 2023-07-10 14:39 A_zjzj 阅读(16) 评论(0) 推荐(0) 编辑
摘要:思路 一道很妙的反悔贪心题。 考场上打的是 O(n×k)dp,其中 kai 的种类数。 考虑贪心,先从大到小枚举 ai,把相同的 ai 一起处理。 当前可以白嫖的直接白嫖,如果不能再白嫖了,再看看如果前面白嫖了一个 x,当前的为 y。 若 阅读全文
posted @ 2022-07-04 19:34 A_zjzj 阅读(70) 评论(0) 推荐(0) 编辑
摘要:题目大意 选出一个字符串序列 s,使得对于每一个 si,都是原串的子串,且每个 sisi1 中都出现过至少两次,求最大的序列长度。 思路 发现其实可以做到让所有选出的字符串都是上一个字符串的后缀,因为如果后面留了一个尾巴,那么前面的字符串把这个尾巴砍 阅读全文
posted @ 2022-06-11 15:47 A_zjzj 阅读(27) 评论(0) 推荐(0) 编辑
摘要:更好的阅读体验 题目传送门 Luogu,Codeforces 谈点其他的 这个题目翻译好像有亿点问题,我重新发一波。 给定一个长度为 n 的排列 p。 令其中第 i 个位置的权值为最长的包含 i 的单调区间的长度(不仅要权值单调,而且要连续)。例如,\(p=[4,1, 阅读全文
posted @ 2022-06-11 15:29 A_zjzj 阅读(38) 评论(0) 推荐(0) 编辑
摘要:题目大意 给你 n 个区间 [li,ri] 以及每个区间的权值 wi,要求选择一些区间出来覆盖区间 [1,m] (要求区间首尾相接),求选择的区间的 w 的极差的最小值。 思路 看到极差的最小值,想到二分,但不会验证,放弃! 然后分析了一下,这个首尾相接 阅读全文
posted @ 2022-06-11 15:28 A_zjzj 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目大意 给你一个字符串,每次询问区间 [l,r] 最小需要改变几个才能使得这个区间的所有子区间都不是长度至少为 2 的回文串。 思路 首先我们想一想所有子区间都不是长度至少为 2 的回文串长什么样子。 aiai+1 \(a_i\ne a_{i+2}\ 阅读全文
posted @ 2022-06-11 15:27 A_zjzj 阅读(38) 评论(0) 推荐(0) 编辑

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