Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:AC了的程序,仅供参考In Reply To:AC了的程序,仅供参考 Posted by:A861223 at 2006-08-24 22:09:27 > #define maxn 50002 > #include<stdio.h> > #include<string.h> > long int n,m,father[maxn],rank[maxn]; > long int find(long int a) > {long int r,q; > r=a; > while (r!=father[r]) r=father[r]; > while (a!=r) {q=father[a];father[a]=r;a=q;} > return(r); > } > void main() > { long int num=0,x1,y1,i,x,y,sum; > scanf("%ld %ld",&n,&m); > while (n!=0) > { > sum=n;num+=1; > memset(father,0,sizeof(father));memset(rank,0,sizeof(rank)); > for (i=1;i<=n;i++) rank[i]=1; > for (i=1;i<=n;i++) father[i]=i; > for (i=1;i<=m;i++) > { > scanf("%ld %ld",&x,&y); > if (x!=y) > { > x1=find(x);y1=find(y); > if (x1!=y1) > { if (rank[x1]>rank[y1]) {father[y1]=x1;rank[x1]+=rank[y1];} > else {father[x1]=y1;rank[y1]+=rank[x1];} > sum=sum-1;; > } > } > } > printf("Case %ld: %ld\n",num,sum); > scanf("%ld %ld",&n,&m); > } > } 才用了路径压缩和启发式合并技术 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator