SDOI 2024 考前做题
1. P9126 [USACO23FEB] Moo Route II S
首先注意到不一定保证
注意到此时相当于负权图最短路。spfa 也许能过,但是我们想要复杂度正确的写法。
利用一下一条边出入时间固定(至少中途不会变)的性质:不难发现每条边最多只会走一次。不妨考虑 dfs,记录当前的位置和时间。考虑扩展,记当前的时间为
注意当前弧要在 dfs 下去之后更新,不然如果出现环就寄了。可以参考代码。
时间复杂度
2. P10199 [湖北省选模拟 2024] 时与风 / wind
是上题的加强版。
首先判断一条路径是否合法:显然充要条件是前一条边的
还是考虑 dfs,不同的是记录的时间变成了区间。可以注意到数据范围有
复杂度不变。
3. P8289 [省选联考 2022] 预处理器
简单模拟。
首先 #define
和 #undef
是好处理的,只需要写一个函数判断标识符即可。在这个过程中用 umap
记录每个宏名被换成什么。
然后考虑普通文本的展开。首先找到每一段极长标识符,然后由于可能递归展开,写一个 dfs 模拟这个过程。整个过程和刚才的极其相似,先将其替换,并再用一个 umap
记录下其正在被展开,然后再遍历所有极长段递归展开。最后结束的时候再将其从 umap
中删掉。其他非标识符直接拼接即可。
需要注意的一点是,umap
删除元素不能直接 =0
(如果你判的是 .count()
),需要 erase
。
于是没了,你注意到
4. P10060 [SNOI2024] 树 V 图
妙妙题。
首先进行一点简单的判无解:关键点的
首先不难注意到一个事实:
由于是在树上,因此两个不同的连通块之间至多有一处相交,就是较深的连通块的顶部节点和其父亲。这个东西可以直接预处理。具体来说就是如果一条边两端颜色不同,就记录下交点。同时如果儿子的颜色之前访问过了,说明不是一个连通块,无解。注意这么做的话需要在一开始将根的颜色标记为已访问,不然会出问题。
然后我们通过简单的 dfs 求出树上节点两两之间的距离,复杂度
考虑两个连通块的交点,那么显然要满足:这两个点到各自关键点的距离相差不超过
于是可以考虑将连通块缩点,然后 dp:设
5. Comet OJ Contest #14 E
有点意思的题,可以加深对 tarjan 代码 的理解。
首先一个环是可以随便走的,因此启发我们对 SCC 缩点。
但是我们发现缩点之后边权成了点权。这是不好的,所以考虑转化一下。
注意到对于点数
一些细节:在重建图的时候,若
然后考虑 dp。设
考虑转移。若存在出边
这里有个小技巧:因为我们无法记录某条路径的
无解:如果终点
时间复杂度
6. P2824 [HEOI2016/TJOI2016] 排序
首先考虑序列只有
不难发现可以求出
回归原问题,发现此时只需要求一个位置的值。考虑离线,二分答案,将
7. MX【二月份 -- CSP-S 全真模拟】-- T3 --围堵
傻逼结论 && 诈骗题。
注意到题目规定(看样例)一开始所在的
对于每个点,如果子树内存在
于是没了,
8. MX【二月份 -- CSP-S 全真模拟】-- T4 --畜牧
这才是好题。
首先有一个关键结论:一次只会卖一个点,而且全卖光。
考虑证明:只要我们可以把两个点的情况合并成一个点,就证完了。
考虑反证,假设在
简单推一下:
考虑作差:
借用一下上面的结果:
得证。
接下来我们考虑
注意到
准确来说,对于一个
显然越靠后 __int128
存储过程中
实现过程中,可以用 set 存储每个段的左端点,并用 vector 存储取出来的段。
时间复杂度
9. P9168 [省选联考 2023] 人员调度 48 分
是
注意到我们可以从底向上考虑,这样子树内的点就是固定不可移动的了,然后考虑把当前节点的人向子树内调动。
具体来说,每个人维护三个 multiset
,分别存储初始在这个节点上的人(的能力值),子树内已经分配好的人,子树内空闲对答案没有贡献的人。分别记为
注意到没有贡献的人显然是能力值最小的,因此可以这么设计算法:首先将所有儿子的
注意到合并 multiset
的过程可以用启发式合并,每次直接 swap 当前点和重儿子的 multiset
(相当于直接清空重儿子的 multiset
),然后对于轻儿子和当前点的
复杂度稍微有点高,但是由于时限 5s 还是可以过的。
UPD;突然发现不用维护
又 UPD:不难发现可以直接使用堆代替 multiset
。由于每次一个堆只需要查询最大/最小值,因此可以直接维护。删除就打下标记即可。
使用 pbds 的配对堆即可做到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!