1 条题解
-
0
题解
思路
把不能再拆成两条非空好路径的部分称为极小块。每个极小块记录五元组 :起点、终点、长度,以及幻觉是否覆盖起点和终点。幻觉为空的单边块记为 。
若一条边 的幻觉中相邻出现 ,可从这对位置分别向左右沿图唯一扩展,得到两端都覆盖的极小块;幻觉末尾等于起点或开头等于终点时,同理得到只覆盖一端的极小块。
做法
子任务 1
生成全部极小块后,从每个覆盖起点的块出发,递归枚举所有可拼接块序列,长度超过 即停止。两个块可以拼接,当且仅当前块的 与后块的 异或为一。该算法在小图上完整枚举所有组合。
子任务 2
用 记录起点为 、当前终点为 、长度为 、末端覆盖标记为 的方案数。按长度递增转移,显式保留起点维度,避免指数枚举。
子任务 3
最终答案不区分起点,因此可直接在初始化时合并起点维度。令 表示当前终点、长度和末端标记,遍历从 出发且首端标记与 异或为一的极小块。每个好路径按其极小块分解唯一计数。
复杂度
子任务 1 与实际块分支数有关,为指数级枚举;子任务 2 为 ;满分算法为 ,其中 是生成的极小块数,且生成阶段总计 。空间复杂度分别为递归栈与块表、、。
正确性说明
任意非空好路径中,至少有一条街道的幻觉包含与该街道端点对应的相邻位置;从该位置向两端扩展得到一个极小块。其余部分只能通过空幻觉边或恰好覆盖一个连接端点的块拼接,拼接条件正是两端覆盖标记异或为一。反之,满足该条件的块序列在连接点处现实商店恰被幻觉覆盖一次,拼接后仍是好路径。因此极小块序列与好路径一一对应,三档算法只是分别枚举、保留或合并起点维度,计数均正确。
- 1
信息
- ID
- 1458
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者