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; }