HDU 1856 More is better

并查集,定义一个新的数组更新集合节点个数,模板题。。

 

输入为0,输出为1。开始多此一举还改成了零,没能理解好题意。。

 

代码:

 1 #include<stdio.h>
 2 int p[10000001],s[10000001],mmax;
 3 int findx(int x)
 4 {
 5     if(x!=p[x])
 6         p[x]=p[findx(p[x])];
 7     return p[x];
 8 }
 9 void merge(int x,int y)
10 {
11     int fx=findx(x);
12     int fy=findx(y);
13     if(fx!=fy)
14     {
15         p[fx]=fy;
16         s[fy]+=s[fx];
17         s[fx]=0;
18         if(mmax<s[fy])
19             mmax=s[fy];
20     }
21 }
22 int main()
23 {
24     int m,i,x,y;
25     while(~scanf("%d",&m))
26     {
27         if(m==0)
28         {
29             puts("1");
30             continue;
31         }
32         for(i=1;i<10000001;i++)
33         {
34             p[i]=i;
35             s[i]=1;
36         }
37         mmax=0;
38         while(m--)
39         {
40             scanf("%d %d",&x,&y);
41             merge(x,y);
42         }
43         printf("%d\n",mmax);
44     }
45     return 0;
46 }

 

posted on 2013-01-27 22:26  acoderworld  阅读(53)  评论(0)    收藏  举报

导航