2023省选题解
D1T1 火车站
为什么省选会考这种题?
不妨考虑一直往右走的情况,如果某一段轨道的左端点是可以到达的,就说明这一段都是可以到达的。
对所有轨道按左端点排序,同时维护能够到达的最右点
初始时
D1T2 城市建造
题目要求大概是能不能将原图分成若干个连通块,连通块大小差
不难发现这种与外面连边的点必然是割点,同时,如果一个点双连通分量不全在一个连通块中,这些点一定两两不在同一连通块内。这些又可以用反证法证明。
考虑建出圆方树,那么一个点双被分割开就相当于是直接删除圆方树中对应的方点。
由于原图中
考虑DP维护答案,同时每一种删除方式的贡献在所有删除方点的LCA处统计贡献。
由于只有圆点对应原图中实实在在的点,所以我们的子树大小记录的是子树内圆点的数量。
考虑对于每一个特定的连通块大小
我们设计一个DP数组
- 如果这个点为圆点,表示它的父亲被删除的情况下,子树内合法的删除方案数。
- 如果这个点是方点,表示在它被删除的情况下,子树内合法的删除方案数。
对于
子树大小
对于
和
考虑答案统计,如果所有删除方点的LCA是方点,只需要判断这个子树内节点数是否是
考虑剪枝优化,如果
细节有点多,注意实现。
D1T3 人员调度
考虑
在解决这类问题时,每次都是选择最长路增广,我们考虑将所有的人员进行排序,从大到小加入,对于每一个数看加入之后是否有完美匹配,有就加入,没有就删除。而根据hall定理,如果每一个子树内选择的节点数量小于子树大小,就一定存在完美匹配。
具体实现时,每一个节点的初始值时子树大小
考虑存在加入怎么办,由于我们不能进行排序。所以在无法形成完美匹配的时候存在某一个点替代掉另一个点的情况,如果这个点到根路径上值的最小值为
可以使用树剖+小根堆维护子树内权值最小的点,实现复杂度为
考虑带删除怎么办,发现我们维护的东西不好用删除实现,所以考虑对时间进行分治,将加入删除变成
使用树剖时间复杂度为
考虑将树剖换成全局平衡二叉树,复杂度变为
D2T1 过河卒
博弈论问题,发现状态数只有
考虑某一个点的胜负态确定方式:
- 如果转移中存在胜态,选择其中最短的。
- 如果所有状态都是负态,选择其中最长的。
- 如果无法使用上面两种确定方式确定,就说明存在平局方式(因为如果所有可以转移的胜负态都能用上述方法确定,则这个点就可以确定)。
发现上述所有性质均符合广搜,所以直接反向广搜即可,复杂度
可以通过钦定红方棋子顺序来将状态数优化成原来的
D2T2 填数游戏
首先考虑什么情况下Bob会无解。
加入对于Bob的每一个集合
也就是说,对于一个连通块
Alice做的事情就是,对于Bob的每一条边,Alice可以在
对于
这个部分可以在若干次dfs中完成,复杂度
对于
那么对于Alice的每一次定向,她会对她没有指向的一侧的所有节点
假设有两个可选择的边,它们做贡献的点集分别为
由此,我们可以证明,所有可选择的边的方向必然构成以某个点为根的外向树。
我们将跟沿一条边移动一次,只会修改一条边的方向,使用线段树维护复杂度时
总体复杂度为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】