1 条题解
-
0
问题本质
- 无向正权图,求 的最短路径,输出路径(任意可行解即可)。
- 无路径输出 。
算法选择
- 边权为正 → 必须用 Dijkstra(不能直接用 BFS,因为边权不一定为 )。
- 朴素 Dijkstra 时间复杂度 会超时(),必须用 堆优化(优先队列)实现,复杂度 。
关键点
-
记录前驱(predecessor)
用 表示从源点 到 的最短路径上 的前一个顶点。
当通过节点 更新 时,同时更新 。 -
输出路径
从 开始反向追溯 直到 ,将节点存入数组,最后逆序输出。
注意路径至少包含 和 (如果不连通则输出 )。 -
处理图的特性
- 自环:不会更新更短路径(因为边权 ,不可能比不走自环更短),可忽略。
- 多重边:Dijkstra 自然处理,取最短权重即可(堆优化会优先弹出最短边)。
-
初始化与边界
- ,其余 。
- 堆中初始放入 。
- 如果最后 ,输出 。
复杂度
- 时间:
- 空间:邻接表 ,距离/前驱数组 ,完全符合 MB 限制。
实现注意事项
- 用
vector<pair<int, long long>>或vector<tuple<int, int>>存邻接表。
- 1
信息
- ID
- 6959
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者