hdu 1856 More is better

并查集 简单题

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define N 10000005
 5 using namespace std;
 6 int par[N];
 7 int M[N];
 8 int Find(int x)
 9 {
10     if(par[x] == x)
11        return x;
12     else
13        par[x] = Find(par[x]);
14      return par[x];
15 }
16 void Union(int x,int y)
17 {
18     int a=Find(x);
19     int b=Find(y);
20     if(a != b)
21     {
22         if(M[a] >= M[b])  //  这就是要比较了
23         {
24             par[b] = a;
25             M[a] += M[b];
26         }
27         else
28         {
29             par[a] = b;
30             M[b] += M[a];
31         }
32     }
33     else
34       return ;
35 }
36 int main()
37 {
38     freopen("input.txt","r",stdin);
39     int i,x,y,n;
40     while(scanf("%d",&n)!=EOF)
41     {
42        for(i = 0;i <= N; i++)  // 最早的初始化
43        {
44            par[i] = i;
45            M[i] = 1;
46        }
47        for(i = 1; i <= n; i++)
48        {
49           scanf("%d%d",&x,&y);
50           Union(x,y);
51        }
52        int Max = -1;
53        for(i = 0; i <= N; i++)
54           if(M[i] > Max)
55             Max = M[i];  //  找出亲戚数最多的那个数字max,输出
56        printf("%d
",Max);
57 
58     }
59     return 0;
60 }
原文地址:https://www.cnblogs.com/imLPT/p/3861914.html