11.11 CSP-S 模拟赛 T4. short
思路
对于 \(60\%\) 的数据, 解决方案是枚举每个点作为路径的起点, 求最短路, 并构造一个最短路图。在最短路图中, 无论怎么走都对应原图的一条最短路, 因此可以使用动态规划(DP)判断在每个点结束的最短路是否经过全部 \(K\) 个点。具体地, 定义 \(f[i]\) 表示以点 \(i\) 为结尾的路径最多经过 \(K\) 个点中的几个点。最终, 将所有符合条件的最短路取最小值即可。最短路使用 Dijkstra 算法与堆优化实现, 时间复杂度为 \(O(n(n+m)\log(n+m))\), 可以通过60%的数据。
对于100%的数据, 首先从 \(K\) 个点中任选一个点作为起点求最短路, 然后找到另外 \(K-1\) 个点中距离该起点最近的点, 该点一定是答案路径的一端。以这个点为新起点再次求最短路, 构造最短路图, 并同样使用60%数据做法中的 DP 求解。最短路依然使用 Dijkstra 算法与堆优化实现, 时间复杂度为 \(O((n+m)\log(n+m))\)。
总结
像这样要找一段路径的问题, 可以尝试用这样的方法确定端点

浙公网安备 33010602011771号