图论总结
一、最短路 最短路常见算法包括堆优化Dijkstra、Bellman-Ford、SPFA、Floyd。 Dijkstra的时间复杂度为O(mlongn),但是但是不能处理负边权。 基于“松弛”操作(或称三角形不等式)的Bellman-Ford时间复杂度为O(nm),可以处理负边权。队列优化的Bellman-Ford,即SPFA,时间复杂度降到了O(km)(k通常为一个较小的常数),但是在特殊构造的图(比如网格图)中容易退化,因此有的大佬建议尽量不要在正式比赛中使用SPFA。 SPFA也可用于差分约束系统,将在第十部分讲解。 与前三种基于贪心的单源最短路不同,基于动态规划的Floyd是一种多源最短路算法,还可以用于求传递闭包等,但时间复杂度达到了O(n 3 ),无法处理较大的数据。 考场上一般不会考裸的最短路,次短路和最短路计数估计也不常考。我个人觉得真正可能作为考题出现的是最短路树,即由某一点出发的最短路上的边构成的树。众所周知,树拥有许多优秀的性质,也因此常常作为考点。放上几道题: WOJ #3771 「一本通 3.1 例 1」黑暗城堡(比较裸的最短路树) WOJ #2423 安全出行Safe Travel(USACO的题) WOJ#4709 迷路 (某道校内模拟赛题) 最短路也可以与其它算法结合: WOJ #3841 双调路径