题目大意
图中的一个点到另一个点, 每条路径都有一个最大的跳跃长度, 求所有路径的最大跳跃长度当中最小值.
涉及知识点
其实是考察最短路算法(Dijkstra, Floyd等)的变形, Dijkstra 和 Floyd 算法通常用来求最短路, 但其实只要改变边的松弛条件, 存储边的数组的含义便会发生改变, 比如PAT10031(使用Dijkstra可以求带点权图的最短路).
使用Dijkstra
思路
根据题目要求, dis数组的含义变为从一个点出发, 到其他点的最长路径中的最小值, 因此, dis的松弛条件变为 dis[v] = min(dis[v], max(dis[u], edge[u][v])), 所以说用Dijkstra的变形的时候一定要考虑不同的松弛条件, dis数组的含义是不同的
代码
|
|
使用Floyd
思路
同理, 根据题目要求, Floyed中的edge数组, 代表不同两点之间最长路径的最小值. 因此, 松弛条件为 edge[i][j] = min(edge[i][j], max(edge[i][k], edge[k][j]));
代码
|
|
总结
在进行最短路变形问题求解的时候, 一定要搞明白松弛条件和数组的含义, 松弛条件不同, 数组的含义也不同.