| ||||||||||
| 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 | |||||||||
AC了的程序,仅供参考#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