hdu 1856

 1 //貌似可以用离散化做,本人菜鸟,搞不定,所以大家将就着看吧。
 2 #include
 3 #include<string.h>
 4 #include
 5 using namespace std;
 6 #define max(x,y) (x)>(y)?(x):(y)
 7 #define maxn 10000000
 8 int fa[maxn];
 9 int rank[maxn];
10 int ans;
11 int n;
12 void init()
13 {
14     int i;
15     for(i=1;i)
16     {
17         fa[i]=i;
18         rank[i]=1;
19     }
20 }
21 int findfather(int x)
22 {
23     if(x!=fa[x])
24         fa[x]=findfather(fa[x]);
25     return fa[x];
26 }
27 void mergy(int x,int y)
28 {
29     if(rank[x]>rank[y])
30     {
31         fa[y]=x;
32         rank[x]+=rank[y];
33         ans=max(ans,rank[x]);
34     }
35     else
36     {
37         fa[x]=y;
38         rank[y]+=rank[x];
39         ans=max(ans,rank[y]);
40     }
41 }
42 
43 int main()
44 {
45     int n;
46     int i;
47     int x,y;
48     while(scanf("%d",&n)!=EOF)
49     {
50         init();
51         ans=1;
52         for(i=1;i<=n;i++)
53         {
54             scanf("%d%d",&x,&y);
55             x=findfather(x);
56             y=findfather(y);
57             if(x!=y)
58             {
59                 mergy(x,y);
60             }
61         }
62         printf("%d\n",ans);
63     }
64     return 0;
65 }
66  

 

转载于:https://www.cnblogs.com/M-cag/archive/2012/08/08/2628262.html

你可能感兴趣的:(hdu 1856)