Bellman-Ford&&spfa(判负环)
题目链接 题意 : 有n个农场,m条双向路径u,v,t表示从u农场到v农场要花t时间,w个虫洞u,v,t,表示从u穿越到v时间倒流t。 问从任意一点出发,再回到出发点,能否在出发前时间到达出发点(时间倒流)。 解法 : Bellman-Ford算法(O(VE)) 算法核心 : 对所有边进行V-1次松弛操作,每一次松弛操作最少确定一点到源点的最短路径,所以最多v-1次可求出所有点到源点的最短路径。 最少一次就可以确定所有点的最短路径,即一条链依次更新。 判负环:如果存在负权环,则不存在最短路径。可以一直进行松弛操作。所以第V次对所有边进行松弛时,可以判断是否存在负权。 学习博客 //#include<bits/stdc++.h> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <string> #include <stdio.h> #include <queue> #include <stack> #include <map> #include <set> #include <string.h> #include <vector> #include <stdlib.h> using namespace std; typedef