标签:
4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
4 2
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define N 10000000 5 int n,a,b,max0,max1,i,num[N],fa[N]; 6 int find(int a) 7 { 8 if(a == fa[a]) 9 { 10 return a; 11 } 12 else 13 { 14 return fa[a]=find(fa[a]); 15 } 16 } 17 void f1(int x,int y) 18 { 19 int nx,ny; 20 nx=find(x); 21 ny=find(y); 22 if(nx != ny) 23 { 24 fa[nx]=ny; 25 num[ny]+=num[nx]; //合并两个集合的数量 26 } 27 } 28 int main() 29 { 30 while(scanf("%d",&n)!=EOF) 31 { 32 for(i = 1 ; i <= 1e7 ; i++) 33 { 34 fa[i]=i; 35 num[i]=1; //刚开始集合只有本身 36 } 37 if(n == 0) 38 { 39 printf("1\n"); 40 continue; 41 } 42 max0=0; 43 for(i = 0 ; i < n ; i++) 44 { 45 scanf("%d %d",&a,&b); 46 max0=max(max0,max(a,b)); //找出关系中编号最大的人 47 f1(a,b); 48 } 49 max1=0; 50 for(i = 1 ; i <= max0 ; i++) 51 { 52 if(max1 < num[i]) //比较每个集合的大小 53 { 54 max1=num[i]; 55 } 56 } 57 printf("%d\n",max1); 58 } 59 }
杭电 1856 More is better (并查集求最大集合)
标签:
原文地址:http://www.cnblogs.com/yexiaozi/p/5726154.html