2024.3 记录
3.5
vp 了一场 edu,过了四题,但是 D 题有 *2100,自我感觉还行。
这里写一下后三题的题解。
CF1913D Array Collapse#
数字互不相同,先上个单调栈求出每个点的支配区间。
考虑 dp,
除此之外,以
随便优化下转移就能做到
CF1913E Matrix Problem#
考虑一个显然但错误的建模方式:每行每列建一个点,
至于为什么错误,因为我们矩阵中原来的
考虑先将矩阵全都变成
CF1913F Palindromic Problem#
考虑求出
先考虑什么时候改字符会增加,假设有一个回文中心
然后再考虑什么时候会减少,显然更改一个字符会使所有原先经过它且不以它为中心的回文子串消失,只需要求出每个位置被多少回文子串经过即可,这个枚举回文中心后贡献是一个等差数列的形式,可以二阶差分维护。
然后就做完了,这里求
晚上学了下 Hall 定理。
CF338E Optimize!#
单独看
因为
线段树维护
时间复杂度
3.6
CF1930F Maximize the Difference#
见我的洛谷专栏。
ABC235G Gardens#
直接容斥,枚举至多
内层的组合数求和是典中典,可以直接递推,然后就
CF1863F Divide, XOR, and Conquer#
牛逼的思路。
看见
然后有个显然的
设
一个小性质:
设 long long
存),同理定义
于是做到了
当然上面的讨论都是基于区间异或和大于
3.7
CF1930E 2..3...4.... Wonderful! Wonderful!#
注意到删除的数字数量
记保留为
一个结论是,合法当且仅当至少存在一个
还是不太好数,考虑容斥,用总数
初始一个长为
时间复杂度
P5590 赛车游戏#
这么你哦。
边权不好定,考虑限制整个路径长度。
记
然后对这个限制跑差分约束即可,时间复杂度
ABC232G Modulo Shortest Path#
见我的洛谷专栏。
P3530 [POI2012] FES-Festival#
先建立差分约束图,判断是否有解。
对差分约束图按强连通分量缩点,由于不同 SCC 之间的距离可以无限拉大,不同 SCC 之间答案独立。
对于每个 SCC,找到其内部的点对
比较感性的理解就是因为边权只有
时间复杂度
3.8
CF960H Santa's Gift#
见我的洛谷专栏。
3.9
CF1879F Last Man Standing#
显然,
考虑枚举
再用一个调和级数的复杂度固定
这题卡常,必须严格
注意 ST 表要维护下标,因为直接合并最大值和次大值是错的。
3.10
CF1902F Trees and XOR Queries Again#
有一个经典的做法,考虑线性基的合并是可重的,将询问
更优的做法是考虑点分治,维护出连通块内每个点到分治中心上的线性基即可,每次回答跨过当前分治中心且完全位于当前连通块内的询问即可,复杂度
CF1059E Split the Tree#
见我的洛谷专栏。
3.11
CF1679F Formalism for Formalism#
钦定每个等价类在字典序最小的数被统计,这个数满足一个性质:不能通过交换使得字典序变小。
进一步刻画这个条件,假设当前在填第
设计 dp 统计:设
时间复杂度
P8089 『JROI-5』Color#
考虑直接在树上 dp,
经典结论:完全二叉树可以拆成
对于满二叉树,预处理
CF1082G Petya and Graph#
考虑最小割,先把答案加上所有的边权,建模流出最小损失。
令
- 对于任意一个点
,如果选 则产生 贡献,连边 ,容量 即可。 - 对于任意一条边
,如果 不同时选则产生 的贡献,建一个虚点 ,连边 ,容量均为 。
然后就做完了。
3.12
ARC159D LIS 2#
若只题/bobo。
一个非常显然的观察就是,当一个上升子序列以第
直接 dp,设
两种情况分开维护,发现都是二维偏序,直接线段树优化即可。
时间复杂度
ARC171D Rolling Hash#
为了方便,不妨将
设
则
则哈希函数可以重写如下:
由于
不难发现,当
不妨对现在的问题进行一个具体的建模,建立
这是个经典的无多项式解法问题,考虑状压,设
判断独立集可以暴力预处理,总复杂度
ARC162D Smallest Vertices#
有点魔怔的题,需要点 Prufer 序列的前置知识,这里是我的小总结。
需要注意的是因为
对于每种树求有多少个好的顶点是非常困难的,我们不妨换个角度,钦定每个点为好顶点,然后求出此时有多少棵满足条件的树累加即可。
首先是一种特殊情况:对于
对于其它结点,假设我们现在要求
然后再套用公式分别计算出子树内和子树外的连边方案数即可,算子树外的方案数时将
时间复杂度
P7142 [THUPC2021 初赛] 密集子图#
卡常屑题,不知道为啥我代码就是过不去。
边权为
预处理
我死活卡不过去了,代码不放了。
3.13
CF461B Appleman and Tree#
一眼题,设
。 。
没了,时间复杂度
CF547E Mike and Friends#
先对所有串建 AC 自动机。
询问
对于每个
时间复杂度
P8867 [NOIP2022] 建造军营#
重新写了一个更加通用且更 educational 的做法。
显然被攻击的边只会是割边,因此将原图边双缩点,在树上考虑问题。
现在问题转化为了,在树上选一些点,要求选的点构成的虚树上的边必选,其它边可选可不选的方案数。
设
3.14
CF1515E Phoenix and Computers#
观察到在两边插入是好处理的,但是中间比较难,因此考虑连续段 dp。
设
- 插入到某个连续段的两端,可以紧贴着插或者和端点空一个。
- 新建一个连续段。
- 合并两个连续段,注意这时新增的电脑数可能为
或 。
时间复杂度
P5999 [CEOI2016] kangaroo#
题目可以转化为,有多少种排列满足首尾为
排列插入的问题同样可以考虑维护连续段的 dp,设
- 新开一段,不难发现一定合法,
。 - 扩展某一段,不难发现一定非法。
- 合并两个段,
。
时间复杂度
P7967 [COCI2021-2022#2] Magneti#
建议直接看这里一份总结:浅谈一类状态转移依赖邻项的排列计数问题:连续段 dp(线头 dp) - ChroneZ - 博客园 (cnblogs.com)。
3.15
P5574 [CmdOI2019] 任务分配问题#
有一个显然的 dp,设
其中
但是这种形式想都不用想肯定带决策单调性,直接树状数组维护顺序对分治即可。
时间复杂度
3.16
去学了下 FWT 板子,虽然是 useless 的东西。
3.18
CF1051F The Shortest Statement#
一定要注意到图是稀疏图。
先任取一棵原图的生成树,如果最短路仅经过树边,可以直接求 LCA 回答。
将所有的非树边的端点拉出来,分别以其为源点跑一遍 dijkstra,用于更新经过了树边的答案。
显然最多跑
时间复杂度
3.19
CF1340C Nastya and Unexpected Guest#
发现我们并不关心安全岛以外的点,因此考虑在安全岛之间 dp,设
转移考虑当前时间加上路程是否刚好红灯,来决定是否要等到下一个循环。
当然这个转移关系显然是带环的,不过转移边权只有
状态定义为最小循环次数而不是时间的作用就在这里体现了,否则只能跑 dijkstra。
时间复杂度
然后今天晚上去学了生成函数和多项式板子……天哪我到底在干嘛……
3.20
CF1715E Long Way Home#
因为
我们令
'简单拆一下:
显然是斜率优化的形式,懒得维护凸包了,我这里直接上了李超树,我用括号括起来的部分就是用李超树能维护的,相当于求若干个一次函数在
注意到飞完之后我们还会在地面上再走几条原图的边,把当前
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具