首页 > 代码库 > poj 3259 Wormholes(bellman-ford判断负环)
poj 3259 Wormholes(bellman-ford判断负环)
题目链接:http://poj.org/problem?id=3259
题目就是问你能否回到原点而且时间还倒回去了。题目中有些路中有单向的虫洞能让时间回到过去
所以只要将虫洞这条边的权值赋为负然后再判断有没有负环就行了。
#include <iostream>#include <cstring>using namespace std;const int inf = 10001;int f , n , m , w ,dis[1001] , counts;struct TnT { int u , v , weight;}T[5200];void relax(int u , int v , int weight) { if(dis[v] > dis[u] + weight) dis[v] = dis[u] + weight;}bool bellman_ford() { for(int i = 1 ; i < n ; i++) { for(int j = 1 ; j <= counts ; j++) { relax(T[j].u , T[j].v , T[j].weight); } } bool flag = true; for(int i = 1 ; i <= counts ; i++) { if(dis[T[i].v] > dis[T[i].u] + T[i].weight) { flag = false; break; } } return flag;}int main() { cin >> f; int s , e , t; while(f--) { cin >> n >> m >> w; counts = 0; memset(dis , inf , sizeof(dis)); for(int i = 1 ; i <= m ; i++) { cin >> s >> e >> t; T[++counts].u = s , T[counts].v = e , T[counts].weight = t; T[++counts].u = e , T[counts].v = s , T[counts].weight = t; } for(int i = 1 ; i <= w ; i++) { cin >> s >> e >> t; T[++counts].u = s , T[counts].v = e , T[counts].weight = -t; } if(bellman_ford()) { cout << "NO" << endl; } else { cout << "YES" << endl; } } return 0;}
poj 3259 Wormholes(bellman-ford判断负环)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。