发布时间:2022-09-16 15:30
998
思路:并查集求根节点个数
#include
#include
#include
using namespace std;
int parent[50005];
int root(int x)
{
return parent[x] == x ? x: parent[x]=root(parent[x]);
}
void make(int a,int b)
{
int f1=root(a);
int f2=root(b);
if(f1!=f2)
parent[f2]=f1;
}
int main()
{
int icase=1,n,m;
while(scanf("%d%d",&n,&m)==2&&(n!=0))
{
int cnt=-1,x,y;
for(int i=1;i<=n;i++)
parent[i] = i;
while(m--){
scanf("%d%d",&x,&y);
make(x,y);
}
for(int i=1;i<=n;i++)
if(parent[i] == i)
cnt ++;
printf("%d\n",cnt);
}
return 0;
}