标签:str pairs scan mis list sample wan second select
4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
4 2HintA and B are friends(direct or indirect), B and C are friends(direct or indirect), then A and C are also friends(indirect). In the first sample {1,2,5,6} is the result. In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.
一个并查集 计算每一个集合的元素 找出元素最多的那个集合,输出元素的个数
输入n=0时也应该输出1
难点就在于,怎么计算集合的元素个数。
。事实上仅仅要在初始的时候每一个元素都初始为1。
然后合并集合的时候+1就好了
#include <stdio.h>
#include <string.h>
#define N 10000000+5
int fa[N],stamp[N];
int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void init()
{
for(int i=1;i<=N;i++)
fa[i]=i,stamp[i]=1;
}
int main()
{
int n,min,max;
while(~scanf("%d",&n))
{
init();
min=10000000+5,max=-1;
for(int i=0;i<n;i++)
{
int a,b;
scanf("%d %d",&a,&b);
a=find(a),b=find(b);
if(a!=b)
fa[a]=b,stamp[b]+=stamp[a];
if(a>max) max=a;
if(b>max) max=b;
if(a<min) min=a;
if(b<min) min=b;
}
int count=1;
for(int i=min;i<=max;i++)
{
if(stamp[i]>count)
count=stamp[i];
}
printf("%d\n",count);
}
return 0;
}标签:str pairs scan mis list sample wan second select
原文地址:http://www.cnblogs.com/claireyuancy/p/6956005.html