POJ 3259 *** Wormholes

原创 2015年11月20日 11:23:59
题意:农场主有f个农场,每个农场有n个田地,m条路,w个虫洞,走路从田地s到田地e需要花费t1时间,而每个虫洞可以从田地q到田地p,且使得时间倒流t2。求对于每个农场,农场主是否能从田地i出发,回到田地i的时间是在他出发的时间之前?

想法:其实就是判断田地之间是否存在负循环,用bellmanford算法就可以了,但是还是WA了两次。因为我忽略了这m条路事实上是可以往返的。

代码如下:

#pragma warning(disable:4996)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<stack>
#include<cstring>
#include<sstream>
#include<set>
#include<string>
#include<iterator>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
const int INF = 0x3fffffff;

struct Path {
	int u;
	int v;
	int value;
}path[5500];

int dis[2000];

bool bellman(int source,int n,int way) {
	for (int i = 0; i <= n; ++i)
		dis[i] = INF;
	dis[source] = 0;
	int flag = 1;
	for (int i = 0; i < n&&flag; ++i) {
		flag = 0;
		for (int j = 0; j < way; ++j)
			if (dis[path[j].v]>dis[path[j].u] + path[j].value) {
				dis[path[j].v] = dis[path[j].u] + path[j].value;
				flag = 1;
			}
	}
	return !flag;
}

int main(void) {
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	int f, n, m, w;
	cin >> f;
	while (f--) {
		cin >> n >> m >> w;
		int u, v, value;
		for (int i = 0; i < m; ++i) {
			cin >> u >> v >> value;
			path[i * 2].u = path[i * 2 + 1].v = u;
			path[i * 2].v = path[i * 2 + 1].u = v;
			path[i * 2].value = path[i * 2 + 1].value = value;//往返都需要添加
		}
		for (int i = 0; i < w; ++i) {
			cin >> path[2*m + i].u >> path[2*m + i].v >> path[2*m + i].value;
			path[2*m + i].value = -path[2*m + i].value;
		}
		bool flag = 1;
		for (int i = 0; i < n&&flag; ++i)
			flag = bellman(i + 1, n, 2*m + w);
		if (flag)cout << "NO" << endl;
		else cout << "YES" << endl;
	}
	return 0;
}

相关文章推荐

POJ3259-Wormholes【Bellman】

  • 2011年07月30日 01:53
  • 8KB
  • 下载

poj 3259 Wormholes spfa判断负环 解题报告

Description While exploring his many farms, Farmer John has discovered a number of amazing wormho...

POJ_3259_Wormholes_最短路算法判环

今天早上又梦见女神了,然后就被小智gei

[ACM] POJ 3259 Wormholes (bellman-ford最短路径,判断是否存在负权回路)

Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29971   Acc...

Wormholes.(POJ-3259)

最短路Bellman的算法,只需用到判断是否存在负圈的部分,因为只要存在负圈,则一定有一条路可以返回起点并且时间还原(一开始题意理解的不好,注意如果返回起点的时间为负数,其实也是可以的,应该是默认了返...

poj 3259 Wormholes bellman

题意 John的农场里N块地,M条路连接两块地(双向),w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts(即是一条单向负权边)。我们的任务是知道会不会在从某块地出发后又回来,看...

POJ 3259--Wormholes(求负环)

题目要求有向图是否存在负环,求负环的方法有B

【POJ 3259】Wormholes

DescriptionWhile exploring his many farms, Farmer John has discovered a number of amazing wormholes....

【POJ 3259】Wormholes(最短路SPFA/Bellman_Ford)

DescriptionWhile exploring his many farms, Farmer John has discovered a number of amazing wormholes....

POJ 3259 Wormholes 【SPFA 判断负环】

Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36782   Accepted: 13467...
  • wyjwyl
  • wyjwyl
  • 2015年08月20日 10:14
  • 229
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 3259 *** Wormholes
举报原因:
原因补充:

(最多只允许输入30个字)