很简单的一道并查集题目!
不过前提是要会并查集!!
并查集 这里有讲
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <stdio.h>
using namespace std;
int father[100005],a,b,m,n,i;
int find(int x)
{
if (father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
int main()
{
while(scanf("%d",&n) && n!=0)
{
for (i=1;i<=n;i++)
father[i]=i;
cin>>m;
for (i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
a=find(a),b=find(b);
father[a]=b;
}
int ans=0;
for(i=1;i<=n;i++)
{
if(find(i)==i)ans++;
}
cout<<ans<<endl;
}
return 0;
}