poj 3259 Wormholes(bellman-ford判断负环)
2024-09-01 06:54:21
题目链接: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;
}
最新文章
- angularjs 动态加载事件的另一种实现
- [SoapUI] 在SoapUI里获取Excel中多行数据并存入List
- es6 代码片段理解
- visual c++ 2010安装失败导致CRM2015安装失败
- echart------属性详细介绍
- Linux TTY框架【转】
- iOS 静态库和动态库的区别&;静态库的生成
- 20150511---Timer计时器(备忘)
- Angular实现数据绑定,它实现原理是什么?
- linux调度器 信息解读
- Stm32高级定时器(一)
- Josn转DataTable(转)
- mono 判断系统的网络是否可用
- c#之冒泡排序的三种实现和性能分析
- hashMap和treeMap
- eclipse版本选择
- jinja模板语法
- 【C#】Using的一个比较好的语言文字解释
- cekephp 事务处理
- WPF优化体验<;一>;(转)