1 条题解
-
0
题解
思路
在已经乘坐 次航班时,只有 的边可用。随 增大,图只会在某些门槛 处加边。在两个相邻门槛之间,每一步使用同一张图转移,因此可用布尔邻接矩阵的快速幂跨过大段时间。
做法
子任务 1:航班序列搜索
限制搜索深度为 ,从城市 开始枚举每次可乘坐的航线。所有边激活后,若某个当前城市能到终点,去掉环后最短路不超过 ,因此该深度上界充分。
子任务 2:逐时刻可达集合 DP
设 为恰好乘坐 次航班后可能所在的城市集合。枚举全部航线,对每条满足 且 的边,将 放入 。扫描到 即可。
子任务 3:事件扫描与布尔矩阵快速幂
按 排序航线。在时刻 维护恰好走 步的可达集合 与当前激活图 。若下一门槛为 :
- 先从 作多源 BFS,若到城市 的最短距离不超过 ,立即得到最小答案;
- 否则用布尔矩阵 将 精确推进到时刻 ;
- 加入所有 的航线。
全部航线加入后再做一次多源 BFS。若仍不可达则输出
Impossible。布尔矩阵的乘法使用位集合实现:若 ,就将 的第 行并入结果第 行。
复杂度
第一层为指数级航班序列枚举;第二层时间复杂度为 ,空间 ;满分做法最多处理 个门槛,复杂度为 位运算,空间 ,其中 、 为机器字长。
正确性证明
在相邻门槛之间图不变,布尔邻接矩阵的 次幂恰好表示长度为 的有向游走可达性,所以快速幂得到的集合正好是门槛时刻的全部可能城市。每个区间内,任何最早到达都是从当前可达集合出发的最短路,因此 BFS 能精确检出是否在下一门槛前到达。若未到达,按时间顺序加入门槛边并继续,不会遗漏任何合法方案。
- 1
信息
- ID
- 1471
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者