CSP-S 历年题集
I 2019
D1 T1 格雷码
简单模拟,翻转只需减一下即可。
D1 T2 括号树
我们令
D1 T3 树上的数
贪心 + 思维。部分分对于正解有启发作用。
暴力 10pts。
首先我们考虑贪心,从小到大枚举每一个数字,尽可能的让每个数字到达的点编号最小,所以我们只需要考虑是否可以使某个数字从
从菊花图开始,可以发现,删边顺序使节点间构成了一个环,我们可以用并查集维护这个环。
链的部分比较难,对于一个点最多只有三种删边情况,即 先删左,先删右,未删,对于一个
- 对于
,需要满足该点必须为先删右。 - 对于在
中间的节点 ,需要满足该点必须先删左。 - 对于
,需要满足该点必须为先删右。
这样我们可以
对于一般的树,对于每个节点,相当于我们有一些先后关系,需要判断是否满足条件。不像链一样,我们只有少数情况,这些先后关系是及其复杂的。
这种先后关系我们可以用并查集/链表维护。
假设我们要
- 对于
,需要满足这个路径上的第一条边 是该点最先删除的。详细一点,需要满足:- 该点最先删除的边为
。 - 不能有边在其前面删除。
- 不能在已经维护好起点与终点所有顺序关系后还存在边未被删除。
- 该点最先删除的边为
- 对于
,需要满足这个路径上的最后一条边 是该点最后删除的。即:- 该点最后删除的边为
。 - 不能有边在其之后删除。
- 不能在已经维护好起点与终点所有顺序关系后还存在边为被删除。
- 该点最后删除的边为
- 对于
中间节点 ,该路径上的两条边 与 的先后顺序是必须相邻且顺序的。即: 之后的不能有边, 之前不能有边。 不能是最后删边, 不能是最先删边。 与 不能已经被删边。- 不能在已经加入两边后,使得维护好起点与终点顺序关系后还存在边未被删除。
这样我们从小到大枚举数字,再从小到大枚举节点,判断是否可行,这样复杂度是
只需要以某个点为根,遍历整棵树,找出符合要求的最小节点编号,这样复杂度是
细节多,思路厉害,是好题。
D2 T1 Emiya 家今天的饭
限制
这样我们枚举主要食材为
则我们设
则有转移方程
则不符合方案数即为
我们考虑优化,可以发现,我们不关心
则有转移方程
复杂度
D2 T2 划分
首先有
对于
这样我们设
符合要求的决策点有
我们可以单调队列优化,复杂度
D2 T3 树的重心
我们考虑每个节点
这样是不好做的,我们考虑选择一个节点作为根,来去除这些麻烦,我们需要使最大节点固定,这样我们可以选择以原树的重心为根,这样除根以外的其他节点的最大节点都朝向根,即对于这些节点
这样我们对于除根以外的点
移项可得
则我们只需要用树状数组求出即可,而对于
最后我们只需要暴力考虑根节点所造成的贡献即可,即分讨一下再判断即可。
复杂度
II 2019 江西重赛
T1 日期
暴力分讨即可。
T2 和积和
我们考虑枚举
我们考虑每个式子,首先有
则有
简单维护即可,复杂度
T3 网格图
考虑 Kruskal 的本质,即为贪心枚举边权,以及防止成环,则我们可以
复杂度
T4 散步
我是历史学家,这就是史。
代你码
T5 多叉堆
考虑对于一棵树
对于合并可以并查集维护。
复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!