Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

why RE??郁闷的就是用这个代码交2492居然过了, 求救................

Posted by qywyh_scut at 2006-08-16 23:54:54 on Problem 1703
       #include <iostream>
using namespace std;


const int MAXN = 100001;

class UFset
{
public:
	int parent[MAXN];
	UFset();
	int Find(int);
	void Union(int, int);
};

UFset::UFset()
{
	for (int i=0; i<MAXN; i++)
		parent[i] = -100002;
	//memset(parent, -100002, sizeof(parent));
}

int UFset::Find(int x)
{
	if (parent[x] < 0)
		return x;
	else
		parent[x] = Find(parent[x]); // 压缩路径
}

void UFset::Union(int x, int y)
{
	int pX = Find(x);
	int pY = Find(y);
	int tmp;
	if (pX != pY)
	{
		tmp = parent[pX] + parent[pY]; // 加权合并
		if (parent[pX] > parent[pY])
		{
			parent[pX] = pY;
			parent[pY] = tmp;
		}
		else
		{
			parent[pY] = pX;
			parent[pX] = tmp;
		}
	}
}

int main()
{
	int caseTime;
	char t;
	int tmp, m;
	int x, y;
	int px, py;
	//scanf("%d\n", &caseTime);
	cin >> caseTime;
//	scanf("%d", &caseTime);
	while (caseTime-- != 0)
	{
		UFset diff;
		UFset same;
	//	scanf("%d ", &tmp);
	//	scanf("%d\n", &m);
		cin >> tmp >> m;
		for (int i=0; i<m; i++)
		{
		/*	scanf("%c ", &t);
			scanf("%d ", &x);
			scanf("%d\n", &y);*/
		//	scanf("%c %d %d", &t, &x, &y);
		//	printf("%c %d %d\n", t, x, y);
			cin >> t >> x >> y;
			
			if (t == 'A')
			{
				if (same.Find(x) == same.Find(y))
				{
					printf("In the same gang.\n");
				}
				else if (diff.Find(x) == diff.Find(y))
				{
					printf("In different gangs.\n");
				}
				else
				{
					printf("Not sure yet.\n");
				}
			}
			else
			{
				if (diff.parent[x] == -100002 && diff.parent[y] == -100002)
				{
					diff.Union(x, y);
					if (diff.Find(x) == x) 
						diff.parent[x] = -y;
					else 
						diff.parent[y] = -x;
				}
				else
				{
					px = diff.Find(x);
					py = diff.Find(y);
					if (diff.parent[px] != -100002)
					{
						if (px != x)
							same.Union(px, y);
						else
							same.Union(-diff.parent[px], y);
					}
					if (diff.parent[py] != -100002)
					{
						if (py != y)
							same.Union(py, x);
						else
							same.Union(-diff.parent[py], x);
					}
				}
		
			}
		}
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator