HDU 1856 more is better

来源:互联网 发布:云计算是什么意思 编辑:程序博客网 时间:2024/06/09 21:54

并查集的题,我的合并不是按高度来的,而是按结点个数来合并的——这可能带来一些方便,不过貌似牺牲了一些时间 :(

我希望了解200MS以内的处理办法,目前没工夫考虑这个优化了,还有一个题待完成 :(

/* * HDU-1856 more is better * mike-w * 2011-8-15 * hint: MFSet */#include<stdio.h>#define MAXN 1000long set[MAXN];int mkset(long size){long* p=set;while(size-->0)*p=-1,p++;return 0;}long find(long e){long t1,root;t1=e;while(set[t1]>0)t1=set[t1];root=t1;while(set[e]>0){t1=set[e];set[e]=root;e=t1;}return root;}long merge(long e1,long e2){long r1=find(e1),r2=find(e2),ret;if(r1==r2)/* they have one common root */return 0;else if(set[r1]<set[r2])/* root r1 contains more elements */ret=(set[r1]+=set[r2]),set[r2]=r1;elseret=(set[r2]+=set[r1]),set[r1]=r2;return ret;}int main(void){long n,i,t1,t2,t3,ans=0;#ifndef ONLINE_JUDGEfreopen("1856.in","r",stdin);#endifwhile(scanf("%ld",&n)!=EOF){mkset(MAXN);ans=-1;for(i=0;i<n;i++){scanf("%ld%ld",&t1,&t2);t3=merge(t1,t2);ans=(ans<t3?ans:t3);}printf("%ld\n",-ans);}return 0;}


 

原创粉丝点击