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

并查集老是WA,哪位帮忙看下代码。。

Posted by yayu_myself at 2009-12-27 10:44:03 on Problem 1611
#include <stdio.h>
#include <string.h>

int pre[30000];

int find(int x)
{
	int p = x, t;
	while (pre[p] > 0) p = pre[p];
	while (x != p)
	{
		t = pre[x], pre[x] = p, x = t;
	}
	return p;
}

void uni(int x, int y)
{
	int a = find(x), b = find(y);
	if (pre[a] > pre[b])
	{
        pre[b] += pre[a];
        pre[a] = b;
	}
	else
	{
		pre[a] += pre[b];
        pre[b] = a;		
	}
}

int main(void)
{
	int n, m, k, t1, t2;
	while (scanf("%d%d", &n, &m))
	{
		if (n == 0 && m == 0) break;
        memset(pre, -1, sizeof(pre));
		while (m--)
		{
			scanf("%d%d", &k, &t1);
			k--;
			while (k--)
			{
				scanf("%d", &t2);
				if (find(t1) != find(t2))
				    uni(t1, t2);
				t1 = t2;
			}
		}
		printf("%d\n", -pre[find(0)]);
	}
	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