代码如下:
#include<iostream>
using namespace std;
int f[1000];
void init(int n) //初始化
{
for(int i=1;i<=n;i++)
f[i]=i;
}
int getf(int v) //返回的是v的所属结点
{
if(f[v]==v)
return v;
else
{
f[v]=getf(f[v]);
return f[v];
}
}
void merge(int v,int u)
{
int t1,t2;
t1=getf(v); //t1是v的所属结点
t2=getf(u); //t2是u的所属结点
if(t1!=t2) //如果不是属于同一结点则根据靠左原则执行下面代码
f[t2]=t1;
}
int main()
{
int n,m,x,y,sum=0; //n和m分别为结点的个数和边的个数
cin>>n>>m;
init(n); //初始化f数组
for(int i=1;i<=m;i++)
{
cin>>x>>y;
merge(x,y);
}
for(int i=1;i<=n;i++)
if(f[i]==i)
sum++;
cout<<sum;
}