ICPC20240815
ICPC20240815
T1 造花(简单版)
-
题意:给定一棵包含 \(n\) 个节点的树,你需要判断是否可以做到删除其中的一个节点以及与该节点相连的所有边,使得剩下的树分成两个连通块,并且这两个连通块都必须是菊花图。
-
题解:要能把一个树分成两个菊花图,要删去的点的度数必定为 \(2\)。然后枚举儿子和孙子节点计算即可。
T2 造花(困难版)
- 题意:给定一棵包含 \(n\) 个节点的连通图,你需要判断是否可以做到删除其中的一个节点以及与该节点相连的所有边,使得剩下的图分成两个连通块,并且这两个连通块都必须是菊花图,按序号从小到大的顺序输出这样的点。
- 不会
T3 飞车狂飙
- 题意:你需要判断一个预定的轨道命令序列结果为这三种情况
- 轨道存在重叠,输出 \(−1\)。
- 轨道无重叠,但不成环,输出 \(0\)。
- 轨道无重叠且成环,输出 \(1\)。
- 题解:使用
map
维护已经铺设过的格子坐标即可判断轨道是否自交。结束后除了判断是否回到原点外,还需判断当前朝向与初始朝向。
是否相同,否则将在判环上出现问题。 - 代码
T4 不醒人室
- 题意:安排合适的小憩时间,确保以下两个条件:
- 小憩时间不能与课程时间重叠。
- 上课时你不会感到困倦。
具体来说,潘奕帆一开始是困的,安排的小憩时间会让潘奕帆在之后的一段时间内保持清醒。你需要确保潘奕帆在所有上课时间内都不困,同时小憩时间不能和任何一节课的时间冲突。
- 题解:双指针维护即可
- 代码
T5 交通管控
- 题意:有 \(k\) 个路口,每个路口有三种可能的信号灯状态(红、黄、绿)。开始时,所有路口的信号灯都是绿灯。通过操作 \(n\) 个控制杆,可以改变每个路口的信号灯状态。每个控制杆可以对所有 \(k\) 个路口同时操作。对于每个路口,控制杆的操作可能有三种效果:
+
:将当前信号灯状态向前推进(红->绿,绿->黄,黄->红)。-
:将当前信号灯状态向后推进(绿->红,红->黄,黄->绿)。0
:不改变当前信号灯状态。
问通过组合使用这些控制杆,能够实现多少种不同的信号灯组合。对于每种组合,统计能够实现该组合的操作杆使用方法数,最终结果对给定的模数 \(M\) 取模。
- 题解:三进制状压
DP
,对于相同的操作杆组合,每根操作杆的使用顺序不影响最终结果,因此用类似背包的方式求解,使用滚动数组可优化空间复杂度至 \(3^{10}\) 左右。 - 代码
T6 树上 MEX 问题
- 题意:计算一棵树的所有连通导出子图的 MEX 之和,并对结果取模。
- 题解:
从每个子图对答案的“贡献”角度思考。若某一子图中包含权值为 \(0\) 至 \(x - 1\) 的所有点,可确定其 \(\operatorname {MEX} \geq x\),即该子图的贡献不小于 \(x\). 先假设所有子图 \(\operatorname {MEX} = 0\),对于包含 \(0\) 权值的 \(t\) 个子图,其贡献至少为 \(1\),故应补充答案,有 \(sum+=t\);在此基础上,对于同时包含 \(\{0,1\}\) 权值的子图,同理有 \(sum+=t'\dots\) 以此类推,若每种子图的数量可快速计算,即可 \(O(n)\) 统计答案。
树形dp
可 \(O(n)\) 求出以每个节点为根节点的子图数量,递推即乘法原理 \(cnt_i = \prod(cnt_t + 1)\). 对于包含 \(0\) 至 \(x - 1\) 所有节点的子图数量 \(ans\),考虑动态维护,每次加入新节点时计算 \(ans\) 的变化量即可。以 \(0\) 权值点为根,前 \(x - 1\) 个节点形成的最小子图为 \(s\),若 \(x\) 权值在 \(s\) 内部,所有包含 \(s\) 的子图必然包含 \(x\),\(ans\) 不变;若 \(x\) 在 \(s\) 外,由于 \(s\) 内部所有点必然与根节点 \(0\) 权值处连接,\(x\) 不可能是它们的祖先,因此顺着 \(x\) 的父亲节点向上寻找,即可将 \(x\) 加入 \(s\) 中。如此处理后,\(x\) 至其祖先的链上答案发生变化,其他位置仍然遵循乘法原理,设该链上子图总数 \(k\),答案变化 \(ans = (ans\div k)\times k'\);\(x\) 向上寻找父节点 \(f\),有 \(k'=\cfrac{k'\times cnt_f}{cnt_x + 1}\),原先数量除去所有不选择 \(x\) 的情况即可。由于每个点只被加入 \(s\) 一次,复杂度仍然为 \(O(n)\). - 代码