题目链接:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1661
题目大意:给定一个含有N(≤500)个结点的图,其中有W(≤200)条负权边,判断整个图中是否存在负权回路。
分析:可以用floyd方法判断图中是否存在负权回路,但是时间复杂度为O(n^3),会超时。注意图中负权边不超过200条,而每一条负权回路至少经过一条负权边,所以枚举每一条负权边(s, t),权值为cost[s][t] < 0,用单源最短路方法计算出t到s的最短路d[t][s],如果d[t][s] + cost[s][t] < 0,那么就存在负权回路。单源最短路用优先队列+Dijkstra,复杂度为O(nlogn + m),故总的时间复杂度为O(w(nlogn + m))。
#include
#include
#include
#include
#include
#include