初学SPFA
SPF A 算法是 Bellman-Ford 算法的队列优化算法的别称,在国际上被称为“队列优化的 Bellman-Ford 算法”,仅在中国被称为 SPFA 算法。也就是说,这是 Bell-man Ford 的升级版( 虽说本人也不会 Bellman-Ford )。 SPFA 通常用于求含负权边的单源最短路径,以及判负权环。 SPFA 的时间复杂度一般为 O(km) 。但由于这种算法的过于玄学,当有人故意卡你时,可能会变成 O(nm), 所以请慎用。 例题 题目描述 小Q非常喜欢在自己的国家旅行。小Q所在的国家有N座城市,分别编号为1~n,小Q所在的城市编号为1。小Q现在想知道从他所在的城市出发,到其他N-1个城市的最短路程分别是多少? 输入 第一行两个整数N,M(1<=n<=1000,1<=M<=100000),分别表示小Q所在的国家有N座城市以及城市间有M条单向道路。 接下来M行,每行三个整数x,y,len(1<=x,y<=n,1<=len<=100000)表示从城市x去到城市y需要走len这么多路程。 输入可能存在重边 输入 一共N-1行,每行一个整数,第i个整数表示小Q从城市1到城市(i+1)的最短路程。如果不能到达输出-1 样例输出 4 4 1 2 3 2 3 4 1 3 2 2 4 1 样例输出 3 2 4 代码实现 #include<iostream>