转自:http://blog.csdn.net/dellaserss/article/details/7724401
#include<stdio.h>
int city[1000];
int find (int x)
{
int r=x;
while(r!=city[r])
r=city[r];
int i=x,j;
while(city[i]!=r)
{
j=city[i];
city[i]=r;
i=j;
}
return r;
}
int main()
{
int n,m,c1,c2,total,f1,f2,i;
while(scanf("%d",&n)!=EOF)
{if(n==0) break;
total=n-1;
for(i=1;i<=n;i++) city[i]=i;
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&c1,&c2);
f1=find(c1);
f2=find(c2);
if(f1!=f2)
{
city[f2]=f1;
total--;
}
}
printf("%d\n",total);
}
}
这道题不用路径压缩时间反而短,但是规范点还是用上了。
做了一天题感觉没状态,休息了一个寒假,还需要调整状态。