单元最短路与别的知识点的结合:
1.二分
2.拓扑排序
3.全排列/枚举
4.动态规划/记忆化搜索dp
5.从多个起点到多个终点求最短路,可以设置一个虚拟点或者当有多个起点一个终点时,反向求最短路
6.双端队列求01最短路
什么是01最短路
顾名思义,边权只有0和1的最短路。
算法分析
01最短路是最短路类型中比较特殊的一种,当然你也可以用一般的最短路解法(Dijkstra或SPFA),但总所周知利用BFS队列维护,时间复杂度往往只需要O(N)。那该如何实现呢?如果当前处理的点连接的边为0,那么将这个点移至队首,否则移入队尾,这样就可以保证队列的单调性。
算法正确性
当我们更新到的点边权为0时,那么这个点一定是到当前为止的最短路,所以可以直接将改点移至队首,如果这个点边权为1,那么这个点可能并不是到当前为止最短的,因此我们要将它移至队尾。
算法应用
通常在遇到的最短路问题中,经常可以将问题抽象为01最短路的模型。例如求一条路径中有多少边权大于k,就可以把大于k的转换成1,小于等于k的转换为0,跑一边bfs即可得出答案。