2025.2 暑假专题记录
2025.2 暑假专题记录
主要记录下暑假专题的作业题做法
树型 DP
P.S. 以下常用
P3047
朴素思路是以每个点为根分别统计其答案,时间复杂度
设
设
- 点
子树内与其距离为 的点,即 - 点
子树外与其距离为 的点,换句话说是点 子树外与其距离为 的点;"子树外"的限制不好处理,可以将其变为 挖去 子树对其造成的贡献,即
综上,转移为
初始值为
考虑类似扫描线的思想,当
因此考虑线段树优化 dp;预处理出
P2279
以下为方便表述,设
设
由于消防局最大覆盖距离为
表示至少覆盖到 这层 表示至少覆盖到 这层 表示至少覆盖到 这层 表示至少覆盖到 这层 表示至少覆盖到 这层
注意状态定义有包含关系,有
对于
对于
对于
对于
对于
对于叶子,初始值为
ABC160F
本质上这个问题是树上拓扑序计数
注意到只要对于点
记点
那么问题转化为需要快速求出以每个点为根时的
记
P4516
考虑如何设计 dp 状态;显然需要一维
综上,考虑设
这是一个树上背包,我们按照
考虑分类讨论转移策略:
- 对于
, 自己没放也没被监听,儿子上不能放,且必须已经被监听 (因为从 监听的路已经断了);因此转移为 - 对于
, 自己放但没被监听,儿子上不能放,且是否已被监听都行;转移为 - 对于
, 自己没放但被监听,对之前 是否已被监听分类讨论:- 若之前未被监听且
处放完后被监听,则 处必然又放又被监听 (因为无法从 监听),转移为 - 若之前已被监听,则
处必然被监听,放不放无所谓,转移为
- 若之前未被监听且
- 对于
, 自己放也被监听,同样分类讨论:- 若之前未被监听且
处放完后被监听,则 处必然放,是否已经被监听无所谓,转移为 - 若之前已被监听,则
处状态随意,转移为
- 若之前未被监听且
初始值为点
实现时注意对每个
P4284
由于每个点贡献都是
与第一道题有点像,考虑换根,第一次处理子树内贡献,第二次处理子树外贡献
不妨直接根据题意设
先考虑子树内;那么点
- 点
自己开始就通电 - 点
的某个儿子 通电,顺着 转移过来
注意若事件 A 发生的概率为
因此不妨初始设
再考虑子树外;一种显然的想法是直接用第一次求出的
不妨认为第一次求出的
答案为
P9745
对于与异或有关的题,常见的想法是拆位;本题涉及断边操作,考虑将与当前点直接相连 / 非直接相连的连通块价值刻画进状态内
设
我们有
考虑如何转移;对于
-
对于
:- 不断
,可以由自己的 异或上儿子的 ,或由自己的 异或上儿子的 得来 - 断
,只能由自己的 得来
综上,
- 不断
-
对于
:- 不断
,可以由自己的 异或上儿子的 ,或由自己的 异或上儿子的 得来 - 断
,只能由自己的 得来
综上,
- 不断
初始值为若
P3523
咕咕咕。感觉没太理解。
CF1394D
首先,对于边
题目转化为给未定向的边定向,使得总权值和最小
从整体上不太好刻画,我们考虑拆贡献;对于点
考虑调整法;我们在一开始先强行令未定向边都从儿子指向父亲,再逐个调整
设
注意到对于
P8867
显然对于一个边双,爱咋建咋建,肯定合法;这启示我们先缩边双,将原图转化为一棵树
设
因此我们更新状态,设
对于点
- 对于
,显然有 - 对于
,分类讨论 之前放没放军营: 之前没放,则 放, 边必须看守, 之前放,则 可放可不放,不放则 边可看可不看,
初始值为
此时答案就是
因此我们对每个点
ARC098D
咕咕咕。放到以后刷 Kruskal 重构树的 blog 里面吧。
DP 优化
P2605
首先考虑朴素 dp
设
显然有转移
注意到第二维的
考虑类似扫描线的思想;预处理出
求
P3628
设
容易得到转移
不妨设
记
我们将
对于坐标系中三点
P4360
记
设
不妨设
记
同理对于坐标系中三点
P3349
暴力状压做法即设
瓶颈在于枚举子集,考虑优化这一过程;注意到记录
这启示我们容斥;枚举
设
CF383E
注意到题目很像 SOS dp,尝试往相关方向转化
设当前元音字母集合为
令
将
实现上,我们先枚举每位
- 若
,令 (即将该位的 累加到 上) - 若
,无需另外做前缀和,无事发生
记第
数学
P2568
即求
这里
筛出
P2257
不妨设
此时由于
对于
交换下求和顺序
发现后面挂着的
此时后面就可以预处理了,筛出
P4588
直接模拟的问题在于
考虑单独将
P3911
记
考虑将
变成莫比乌斯反演的形式
交换求和顺序
换
把后面的
筛出
枚举
AGC003D
这是一个抽象做法
对于本身就是完全立方数的数,最多选
考虑对于每个
数据范围不支持我们直接分解质因数……么?注意到
字符串
P4555
记
考虑 manacher;记新串 (如 aba
#a#b#a#
) 上第
不过此时直接算答案会有问题;我们只是根据每位的最长回文串长度更新了
比如 ababa
#a#b#a#b#a#
,以第 a
为中心的回文串除了 #a#b#a#b#a#
还有 #b#a#b#
,但我们只用前者更新了
因此我们还需要再进行一次递推;回文串向中间挪动一次会少
枚举每个 #
的位置
P2870
朴素贪心思路是比较两头字典序,若相同则暴力往中间挪
可以使用哈希优化这一过程,二分头尾最长相同串的长度,做到
P9873
114514
串太复杂了,考虑简化为 1
, 14
, 5
, 14
串
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】