晚练计划总结
26-1-20
。。。
简单题目。
26-1-21
神秘 Trick,84 pts
26-1-25
缩点,有 DAG 性质就好做了。
26-1-26
没考虑直径以外的点,挂完了。
26-1-27
绿题,写的时候打错了一个字符,挂了 45 分。
26-2-25
P1772,看了一会发现数据范围支持跑
26-2-26
P2254,简单题,
26-3-2
P9921,(1,1)~(i,j) 的前缀 max 答案和 (i,j)~(n,n) 的后缀 max 答案再枚举每个点再二分一下即可。
我草 cdo 会
哦哦那我会双 log 做
26-3-3
保龄啦~~~~~~
建图???何意味???我这几天图论专题白做了???
连
解释奇数解的具体做法:
不难发现图中如果没有环,那么这个图就是个森林。
由于没有环,不可能有偶数解,所以所有点的度数都得是奇数。
注意到想要改变度数只能改变这个节点和其父亲的连边情况,所以从叶子节点向上进行改变即可。
若一个点的当前度数为偶数,则连接其父边,使其度数变为奇数,这样对于每一棵树,除了根节点都一定可以合法,此时根据根节点的度数的奇偶性就可以判断是否有解(根节点无父边,无法在不影响子节点的情况下改变度数奇偶性)。
26-3-4
写爆搜,枚举每个
26-3-5
。。。
无语了。
注意点:
- 先考虑顺子,再考虑带牌,这样搜得快。
- 加一个形如
nmf(i, 2, 15) if (cnt[i]) now++; ans = min(ans, now);这样的东西,方便剪枝。 - (加强版)加一个优化,对于一个搜索过的状态,若当前解不优于原解,则剪枝,可以用类哈希加 map 实现。
26-3-8
建一个分层图,第一层是横向边,第二层是纵向边,两层之间建边权为 1 的双向边,还有连接到起点和终点的边。
这是一个点数边数都是
26-3-9
设
最后时间复杂度是
26-3-10
26-3-11
DP,设
朴素和优化都是蛮好想的。
但是,对于同一头牛的多个询问,
26-3-12
反图,拓扑求最长路,然后依次考虑最长路为
因为从小依次考虑,所以上一个长度的最长路的排名不仅可以用来确定选择哪些路径转移给当前长度的最长路,还可以据此对当前长度的最长路排序。
就是将所连接的边的边权为第一关键字,连接的上一长度的最长路的排名为第二关键字排序。
后半部分逐长度处理用 bfs 实现,因为 bfs 一层一层遍历的结构恰符合我们的需要。
26-3-15
爆零。
发现图是个森林后可以 DP 做。
设
有转移如下:
初始设
注意不要设
26-3-16
场上 80 pts。
二分答案+DP。
设
为什么这个状态是对的,有一个贪心证明:如果当前在
注意转移时的贪心策略是从小到大找不是从大到小。
例子:
26-3-17
场上 40 pts,草,没写出来正解。
考虑朴素
26-3-18
场上思路从一开始就是走进了死路(一遍 DP 且根固定),本质上一定需要换根以通过简单的单一结构(即下文所提的“父节点-节点-子节点”形式连边)进行 DP 来找到复杂的最优答案。
第一遍 DP 是容易的,第二遍换根也不难,只提一下第一遍 DP 的状态定义:
26-3-19
一道贪心,破局点是从答案序列的第一个位置考虑,结合原树节点编号互不相同的性质,分类讨论正确结构。
26-3-22
本质就是 bfs,但是要用“整层处理”的思想。
时间复杂度看起来很不对,但是事实上是
大概理解:一个点不会成为下一层,当且仅当队首与之有连边,所有点最多会被留下
26-3-23
神秘贪心,感性理解不难但是就很神秘。
然后场上还没写出来。
我菜完了。 /ll
26-3-24
二分答案,转化为 01 序列,考虑如何判定,设
26-3-25
考虑
26-3-26
从大到小正着做
注意,虽然转移只用最优解,但是并查集合并要将所有
26-3-29
P9322 超级棋子,难点在于发现马的规律。
公式为:
26-3-30
P4364 IIIDX,题解 To do。
26-4-1
P15567,直接
注意本题要开 int128。
26-4-2
第一题 P13308,可以用哈希表记录下所有的修改,还可以离线处理,只记录与询问有关的位置的修改。
第二题 P12247,二维偏序下的 DP,将条件排序后用树状数组维护最优值,注意 DP 时要取前缀 max 转移。
26-4-7
P15939。
考虑贡献直接算的条件,然后发现需要区间覆盖维护来求,ODT 维护后,算出下一个断点(未跨过的辣团子),再算一下单段贡献,就可以倍增,然后做完了。
26-4-8
P14645。
去除英雄不能重叠的条件,显然最远点到达后就不会对其他点产生影响了,而到最远点的英雄显然也最早出来。
bfs 求所有可达点的距离,将所有堡垒的距离从大到小排序后发现答案就是
怎么想到这个结论呢?
考虑发配(?)
然后这个玩意的修改可以拍到距离域上通过线段树维护,线段树 info 是区间堡垒数和答案的 max,tag 维护对答案 max 的区间减,三种合并显然很简单,还要支持单点修改。
做完了。
但是场上写线段树 bug 有点多,没写出来(大悲),只交上了暴力。
26-4-10
晚练变早练说是。
第一道题,发现边双缩点后,边双内的点两两显然可以异色,再想想发现有且仅有割边连接的点需要同色,并查集维护一下同色性,然后如果并查集上至少有两种不同色连通块即有解,随便选一个连通块染成与其它点不同颜色即可。还需要特判不连通的情况,此时显然无解。
第二道题,简单 DP,设
26-4-13
二分答案 + 树形 DP 实现贪心。
显然有关于答案的单调性,考虑如何实现 check。
设
设
转移如下:
若
若
若
DFS 一遍贪心求出最优点燃次数
说实话这个贪心挺模糊的,但也不知道怎么严格证明。
26-4-14
绿绿得紫。
第一题 P11187,考虑 DP,
第二题 P12000,二分答案加贪心,贪心策略就是在满足游玩需求的情况下,最多只买可以撑到下一个
26-4-20
P15301,汗国军队。
首先考虑插入,发现对于 LIS 的更新可以用对 01 差分数组的更新刻画,而且还很容易做,直接放进 DP 维度里,还有一个对于汗王护卫的要求,再加一维表示最后一个加入的汗王护卫的位置即可维护。
总状态数
26-4-21
绿绿蓝得紫。
第一题 P12675,分讨,共四种方案。
- 将
变合法,答案 。 - 将
变合法,答案 。 - 将
变合法,,答案 。 - 将
变合法,但要求 ,答案 。
第二题 P3419,贪心,贪心策略猎奇,就是若当前需要从地板中移除玩具车,则移除产生贡献最晚的那一个(下一个编号与之相同的车最远的)。
26-4-22
P15352,就是要支持
26-4-23
发现每个出现了的数可能范围最大长度为
26-4-26
拆点处理边权,然后就可以用矩阵优化 DP,转移矩阵的幂二进制拆分,然后注意到并不需要用矩阵存储转移结果,只需要直接转移即可。
对于美食节,只需要分段转移,在美食节给当前的 DP 数组加一个值即可。
26-4-27
第一题 P10837,发现只需要关注某朵凋零玫瑰覆盖区间内被覆盖次数为
第二题 P11969,超绝巴巴博弈,不想写了。
26-4-28
P14598。
考虑线段树处理,没有修改,所以关键在于 info 和合并。
info 包含
分别表示以
合并贴代码:
1 | struct info |
挺显然的,不知道做的时候在想什么。
文件名还打错了,直接起飞。
26-4-29
P9402。
注意到
naive 的就是直接枚举上车点转移到下车点,这个转移是
时间复杂度瓶颈是 DP,时间复杂度
26-5-5
注意到
发现这个过程可以倍增加速。
一条线路事实上就是区间对
然后倍增就是形如这样的东西
然后就做完了。
26-5-6
不好题。
首先是发现操作的一定是连通块。
然后先操作的可以通过后操作的连接。
只要所有颜色最后都能连通即可。
然后两个并查集,一个维护连通性,一个维护已操作点连通性及已操作点连通块邻域。
思维是没有的,代码是复杂的,不开 vector 替换静态数组是会 TLE 的(猎奇)。
26-5-7
首先推性质,就是在两两配对过程中的任意时刻,至少有一个点度数为
不会证。
知道这个性质后就可以用拓扑排序,每取一次匹配就把相邻边全删了,然后继续取出当前所有一度点。
然后重构图,类似缩点,但是是为了保证走到一对匹配上时一定会从另一端出来。
重构过程就是有
然后再跑一遍拓扑排序求最长路即可。
26-5-11
唐。
26-5-12
重点是从按学校顺序考虑转到按值域区间考虑,之后的转移和式子就挺好想的。
26-5-13
首先写出
26-5-14
数数题,正难则反,注意到元素为正整数,所以不出现要求的结构的条件就是当前序列后缀和中不同时存在
26-5-17
这种地雷炸弹苦力怕的数数题是不是都是设个 DP 钦定 xxx 不爆炸时的方案数啊。
设
设
另有设
用树状数组处理区间求和,在每个
26-5-18
题目就是给出一棵树,再给若干带权非树边,求在没有偶环的基础上能保留的非树边的权值和的最大值。
发现直接形成偶环的非树边是肯定不能要的,而两个奇环若有相交边则会形成偶环,因此,我们需要在此条件下保留更多权值。
我们考虑用树形 DP,用以存储子树答案。
发现一条边

打绿勾的部分是可以贡献给
因为若使用
为了方便转移,加一维状压表示当前节点还未使用哪些子树。
这是第一步转移,不考虑非树边的贡献,只考虑子树。
此时
定义
转移就是这样,跑一遍树形 DP 即可。
26-5-19
从小到大加点,这样不用多记一维或者限制转移以确认转移系数。
两点距离不大于
26-5-20
Cancelled,题面是求若干基环树的直径。
26-5-21
假交互,从后往前考虑,发现对于一个点 i,若 protocol[i] 为 0/1/2 分别表示:i 和 host[i] 之间:选权值更大的一个/要么同时选要么同时不选/至多选一个。
分别表现为:
confidence[host[i]] += confidence[i];ans += confidence[i], confidence[host[i]] = max(confidence[host[i]] - confidence[i], 0);confidence[host[i]] = max(confidence[host[i]], confidence[i]);
最后 ans += confidence[0];。
26-5-24
结论是如果如果有子串
考虑线段树。
info 维护区间子串
tag 是区间取反,这个也是可以与 tag 和 info 合并的,不过 info 中就要记录若干辅助信息,例如其他类型子串的出现等等。
反正非常麻烦。
但这就是正解。
26-5-26
一个简单题,题面中的问题看似很不可做,实则就是转化成给你上有若干点的数轴,你要在点与点之间选点,两点之间最多选一个,选的点不能相交,问你最多选多少点,以及选点最多情况下的方案数。
注意到题目答案要求一个 array<int, 2>,其实这个 array<int, 2> 的合并是满足交换律和结合律的。
具体合并过程如下:
1 | array<int, 2> operator+(array<int, 2> x, array<int, 2> y) |
然后上述 DP 过程显然一个前缀和优化 DP 秒了。
26-5-27
先考虑贪心,将元素按
对于一个长度为奇数的区间
然后发现随着
所以将询问按
具体的,用
一个区间 min(mn[f][l&1][0],mn[f][(l&1)^1][1])。
26-6-1
真交互,恐怖。
Sub 1 简单。
重点看 Sub 2。
注意到,我们可以将整个序列分成若干组,每组内部进行两两询问,这样可以从每组内选出一个。
举例,分成
发现分组越多,查询次数越少,但是排除非最大值的速度更慢,请求数多。
反之分组越少,查询次数越多,但是排除非最大值的速度更快,请求数少。
注意到询问次数之和
我们考虑先手动寻找最优解。
考虑使用记忆化搜索。
设
枚举分组数量
对于
1 | LL calc(int y, int d) |
但此时转移太慢了,但是并没有好的转移优化方法。
所以只能随机减少枚举范围。
改成了某一个
嗯,所以这样就能就能跑出来了,兑。
我们只需要最终结果,所以结果如下……
1 | {500000, 250000, 125000, 62498, 20832, 3472, 183, 1} |
……刚好询问
26-6-2
做过的题。
二分答案加树形 DP。
注意到国王往回走显然是更宽松的,所以我们不考虑这种情况。
设
有
显然,因为我们不知道哪个子树会被国王走,显然要填上儿子,所以需要把所有不合法可能消灭,自己能自力更生做到合法((支援过去)。
26-6-3
Trick:区间异或差分成两个单点操作,而且某些原序列要达成的条件也可以转化成差分数组上的情形,这样更加易于建模、转化。
将点亮当做 c[a[i]] ^= 1, c[a[i] + 1] ^= 1,目标就是将差分数组所有位置置为
区间取反就是差分数组上两点取反。
转化成图论问题。
图上点有点权,即差分数组的值,而区间取反就是一条边连接
发现最终连边中,不可能有环,因为环对环上每一个点都贡献了偶数度数,所以不影响奇偶性。
然后发现,由于边对度数的总贡献显然是偶数,所以点权为
因此最终结构就是在配对的
然后求出所有
26-6-4
恐怖树形 DP。
首先,由于点灯路径有两个端点,所以对于一颗子树,就有三种可能:
- 两个端点均不在子树内;
- 有一个端点在子树内;
- 两个端点在子树内。
对于这三种状态,我们考虑直接设对应的 DP,我也不知道为什么要考虑这个但就这么考虑吧。
分别设
唉算了还是直接看洛谷上的题解吧。
题解链接。
26-6-5
To do.
26-6-7
To do.
26-6-8
To do.
26-6-9
To do.
26-6-10
乱搞过的,直接枚举
骗你的,作弊了。
26-6-11
所以我们直接贪心地塞满,剩下没用的
这样做的复杂度是什么呢,一个物品被拼装,最多拼
所以复杂度是
26-6-13
其实并非晚练,但还是记下来。
To do.
26-6-15
早上由于断网所以练了一道“晚练”题。
To do.
晚上一道蓝题,DP,通过直觉和对期望线性性的一点点感知做出来了。(滑稽)
设
设
转移方程如下:
大力转移即可,时间复杂度
26-6-20
转化重点是将不可做的随机选点变成对于随机排列按顺序删点。
可以这么转化是因为对于任意时刻,所在连通块大小不大于
然后发现,一个大小大于
一个连通块产生贡献的条件是它被“剥”出来,即树中所有相邻点均被删除,且子图中所有点还没被删除。设子图内有
然后用树形 DP 统计一下满足某种条件的子图数量。
DP 是朴素的,
26-6-21
首先,要从一段 01 序列中选出若干不相邻 1,只要求最大化选出数量,这玩意的信息是可以合并的,记录一下左右边界是否有被选的 1 时的答案即可。
然后就有很多办法了,无论是二分答案在枚举最小值,还是双指针直接求都行。
26-6-22
AwA。
首先发现,要开始加边之前,我们先要将所有度数大于
状态设计
转移如下:
对每个儿子
并将所有
若儿子不足两个,则对应的
则转移为:
- 标题: 晚练计划总结
- 作者: DimStar
- 创建于 : 2026-03-02 21:08:57
- 更新于 : 2026-06-22 19:36:21
- 链接: https://dimstar-zhang.github.io/2026/03/02/晚练计划总结/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。