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

这道题用并查集加qsort

Posted by zpdlut at 2010-07-10 20:01:30 on Problem 1838
#include<iostream>
using namespace std;
struct Trees
{
	int x;
	int y;
	int t;
	int p;

};
int sum[16001];
int parent[16001];
int cmp(const void * Aa,const void * Bb)
{
	Trees A = *(Trees *)Aa;
	Trees B = *(Trees *)Bb;
	if(A.x == B.x)
		return A.y - B.y;
	return A.x - B.x;

}
int cap(const void * Aa,const void * Bb)
{
	Trees A = *(Trees *)Aa;
	Trees B = *(Trees *)Bb;
	if(A.y == B.y)
		return A.x - B.x;
	return A.y - B.y;

}
int com(const void * Aa,const void * Bb)
{
	int A = *(int *)Aa;
	int B = *(int *)Bb;
	return B-A;
}
int find_parent(int x)
{
	if(x != parent[x])
	{
		parent[x] = find_parent(parent[x]);

	}
	return parent[x];

}
void Tree_union(int x,int y)
{
	int a = find_parent(x);
	int b = find_parent(y);
	parent[a] = b;
	sum[b]+=sum[a];

}
int main()
{
	Trees T[16001];
	int nums;
	int region_nums;
	cin>>nums>>region_nums;
	int max = 0;
	for(int i=0;i<nums;i++)
	{
		T[i].t=i;
		parent[i]=i;
		sum[i] = 1;
		cin>>T[i].x>>T[i].y;
		

	}
	qsort(T,nums,sizeof(Trees),cmp);
	for(int i=1;i<nums;i++)
	{
		if((T[i].x==T[i-1].x)&&(T[i].y-T[i-1].y==1))
		{
			if(find_parent(T[i-1].t)!=find_parent(T[i].t))
				Tree_union(T[i-1].t,T[i].t);
		}

	}
	qsort(T,nums,sizeof(Trees),cap);
	for(int i=1;i<nums;i++)
	{
		if((T[i].y==T[i-1].y)&&(T[i].x-T[i-1].x==1))
		{
			if(find_parent(T[i-1].t)!=find_parent(T[i].t))
				Tree_union(T[i-1].t,T[i].t);
		}

	}
	int result[16001];
	int j=0;
	for(int i=0;i<nums;i++)
	{
		if(parent[i] == i)
			result[j++]=sum[i];

	}
	qsort(result,j,sizeof(int),com);
	for(int i=0;i<region_nums;i++)
		max+=result[i];
	cout<<max<<endl;

}

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