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) 收藏 举报
浙公网安备 33010602011771号