题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
题意:输出有多少个连通分量
分析:看大佬的博客有两种思路是实现,我的实现是假设将所有的点都视作一个连通分量,然后每次合并减一即可;
另一种思路:返回0就ans++;也行,大致思路开始一样的吧
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int fa[1008];
int findset(int x)
{
return fa[x]==-1? x:findset(fa[x]);
}
int bind(int x,int y)
{
int fx=findset(x);
int fy=findset(y);
if(fx!=fy)
{
fa[fx]=fy;
return 1;
}
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(fa,-1,sizeof(fa));
int x,y,ans=0,n,m;
scanf("%d%d",&n,&m)==2;
ans=n;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
ans-=bind(x,y);
}
printf("%d\n",ans);
}
return 0;
}