Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)
Total Submission(s): 24825 Accepted Submission(s): 8911
Input The first line of the input contains an integer n (0 ≤ n ≤ 100 000) - the number of direct friend-pairs. The following n lines each contains a pair of numbers A and B separated by a single space that suggests A and B are direct friends. (A ≠ B, 1 ≤ A, B ≤ 10000000)
Output The output in one line contains exactly one integer equals to the maximum number of boys Mr Wang may keep.
Sample Input 4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
Sample Output 4 2 Hint A 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. 題目大意:就是找最大的集合,輸出包含個數。 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1856 代碼:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX=10000005;
int f[MAX],v[MAX];
int find(int n)
{
if(n!=f[n])
f[n]=find(f[n]);
return f[n];
}
int main()
{ int n;
while(cin>>n)
{
for(int i=0;i<MAX;i++)
{f[i]=i;v[i]=1;}
int a,b;
int t=1;
for(int i=0;i<n;i++)
{scanf("%d%d",&a,&b);
a=find(a);
b=find(b);
if(a!=b)
{f[a]=b;v[b]+=v[a];t=max(t,v[b]);}
}
cout<<t<<endl;
}
return 0;
}