http://acm.hdu.edu.cn/showproblem.php?pid=1856
题意:老师想从10000000里面找尽可能多的学生帮他做项目,条件是这些人必须都认识。给n个关系,求最多有多少个人能帮助老师做项目。
因为数据量较大,如果不进行数据压缩的话就过不去。
#include <iostream>
using namespace std;
#define N 10000005
int boy[N];
int findfather(int n){
if (boy[n]<0)
return n;
boy[n]=findfather(boy[n]);
return boy[n];
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1856in.txt","r",stdin);
#endif
int n,a,b,i,min;
while (scanf("%d",&n)!=EOF){
for (i=1;i<N;i++)
boy[i]=-1;
for (i=0;i<n;i++){
scanf("%d%d",&a,&b);
a=findfather(a);
b=findfather(b);
if (a!=b){
if (boy[a]<=boy[b]){
boy[a]+=boy[b];
boy[b]=a;
}
else {
boy[b]+=boy[a];
boy[a]=b;
}
}
}
min=0;
for (i=1;i<N;i++)
if (boy[i]<min)
min=boy[i];
printf("%d\n",-min);
}
return 0;
}