16国庆“并查集”

参考:

1.HDU 1856 More is better

 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856

题目大意:

  给出N对关系 2*n 个人,求关系圈最大的人数。

解题思路:

  

 AC Code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=10000005;
 4 int f[maxn],v[maxn];
 5 
 6 int findset(int x)
 7 {
 8     return f[x]!=x?f[x]=findset(f[x]):f[x];
 9 }
10 
11 void merge(int a,int b)
12 {
13     int fa=findset(a);
14     int fb=findset(b);
15     if(fa!=fb) f[fa]=fb;
16 }
17 
18 int main()
19 {
20     int n,a,b,i,ans;
21     while(~scanf("%d",&n))
22     {
23         ans=0;
24         for(i=1; i<=10000000; i++) f[i]=i,v[i]=0;
25         while(n--)
26         {
27             scanf("%d %d",&a,&b);
28             merge(a,b);
29         }
30         for(i=1; i<=10000000; i++) v[findset(f[i])]++;
31         for(i=1; i<=10000000; i++) ans=ans>v[i]?ans:v[i];
32         printf("%d\n",ans);
33     }
34     return 0;
35 }

 

posted @ 2016-10-08 22:38  马丁黄瓜啊  阅读(161)  评论(0编辑  收藏  举报