满意答案
nwxxf17e
2013.04.23
采纳率:50% 等级:12
已帮助:4749人
#include
int road[1005];
int find(int a)
{
if(a==road[a])
return a;
else
return find(road[a]);
}
void merge(int a,int b)
{
int x,y;
x=find(a);
y=find(b);
if(x
road[y]=x;
else
road[x]=y;
}
int main()
{
int n,m,i,a,b,ans;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
road[i]=i;
while(m--)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
for(ans=-1,i=1;i<=n;i++)
if(road[i]==i)
ans++;
printf("%d\n",ans);
}
return 0;
}
00分享举报