码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 题目2983 Is the Information Reliable?(差分约束)

时间:2015-07-17 22:52:53      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

Is the Information Reliable?
Time Limit: 3000MS   Memory Limit: 131072K
Total Submissions: 11859   Accepted: 3742

Description

The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 years ago. Draco established a line of defense called Grot. Grot is a straight line with N defense stations. Because of the cooperation of the stations, Zibu’s Marine Glory cannot march any further but stay outside the line.

A mystery Information Group X benefits form selling information to both sides of the war. Today you the administrator of Zibu’s Intelligence Department got a piece of information about Grot’s defense stations’ arrangement from Information Group X. Your task is to determine whether the information is reliable.

The information consists of M tips. Each tip is either precise or vague.

Precise tip is in the form of P A B X, means defense station A is X light-years north of defense station B.

Vague tip is in the form of V A B, means defense station A is in the north of defense station B, at least 1 light-year, but the precise distance is unknown.

Input

There are several test cases in the input. Each test case starts with two integers N (0 < N ≤ 1000) and M (1 ≤ M ≤ 100000).The next M line each describe a tip, either in precise form or vague form.

Output

Output one line for each test case in the input. Output “Reliable” if It is possible to arrange N defense stations satisfying all the M tips, otherwise output “Unreliable”.

Sample Input

3 4
P 1 2 1
P 2 3 1
V 1 3
P 1 3 1
5 5
V 1 2
V 2 3
V 3 4
V 4 5
V 3 5

Sample Output

Unreliable
Reliable

Source

POJ Monthly--2006.08.27, Dagger

http://blog.csdn.net/lyy289065406/article/details/6648688

ac代码

#include<stdio.h>
#include<string.h>
#include<queue>
#include<string>
#include<iostream>
#define INF 0xfffffff
using namespace std;
int head[1010],vis[1010],cnt,dis[1010],s,cot[1010];
int n,m;
struct s
{
	int u,v,w,next;
}edge[300200];
void add(int u,int v,int w)
{
	edge[cnt].u=u;
	edge[cnt].v=v;
	edge[cnt].w=w;
	edge[cnt].next=head[u];
	head[u]=cnt++;
}
int spfa(int s)
{
	int i;
	for(i=1;i<=n;i++)
	{
		dis[i]=INF;
	}
	memset(vis,0,sizeof(vis));
	memset(cot,0,sizeof(cot));
	dis[s]=0;
	vis[s]=1;
	queue<int>q;
	q.push(s);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		vis[u]=0;
		cot[u]++;
		if(cot[u]>n)
			return 0;
		for(i=head[u];i!=-1;i=edge[i].next)
		{
			int v=edge[i].v;
			int w=edge[i].w;
			if(dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				if(!vis[v])
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	return 1;
}
int main()
{
	//	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		char str[2];
		int i;
		memset(head,-1,sizeof(head));
		cnt=0;
		for(i=0;i<m;i++)
		{
			scanf("%s",str);
			if(str[0]=='P')
			{
				int a,b,c;
				scanf("%d%d%d",&a,&b,&c);
				add(a,b,c);
				add(b,a,-c);
			}
			else
			{
				int a,b;
				scanf("%d%d",&a,&b);
				add(b,a,-1);
			}
		}
		s=n+1;
		for(i=1;i<=n;i++)
		{
			add(s,i,0);
		}
		if(spfa(s))
			printf("Reliable\n");
		else
			printf("Unreliable\n");
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 题目2983 Is the Information Reliable?(差分约束)

标签:

原文地址:http://blog.csdn.net/yu_ch_sh/article/details/46931167

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!