题目链接:https://nanti.jisuanke.com/t/31445
题目大意:给定一张图,问第K最短路的长度是否小于给定值T
求第K最短路,令$f=g+h$,$g$为当前已经走过的距离,$h$为当前点到终点的最短距离
从起点开始拓展,每次选择$f$最短的点进行拓展(入队),每次出队时检查是否走到终点并统计终点出队次数,当终点出队次数为$k$时当前点的$g$就是答案
可以这样考虑:每次严格按照估价函数进行拓展,则第一次走到终点的方案一定是最短路,第二次就是第2最短路,第k次就是第k最短路
这样先用spfa预处理出每个节点的$h$再用A*拓展即可
这题还有一个需要注意的地方:A*用的优先队列很有可能在使用完后没有被清空(因为函数可能提前退出了),此时如果直接用会MLE,而如果用一个一个pop的方式清空会直接TLE,所以比较好的解决方法是直接把优先队列写在函数体内部,这样就不用清空了
1 |
|