#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
#define N 1010
int bin[N];
int n,m;
int findx(int x)
{
int r=x;
while(bin[r] != r)
r=bin[r];
return r;
}
void join(int x,int y)
{
int fx,fy;
fx= findx(x);
fy= findx(y);
if(fx!=fy)
bin[fx]=fy;
}
int main()
{
int i,j;
int x,y;
int fx,fy;
while(cin>>n>>m,n)//n为点 m为边
{
// 初始化
for(i=1;i<=n;i++)
bin[i]=i;// 1 2 3
// 通过下标 和 存的数 表示这两个地方通
for(i=1;i<=m;i++)
{
cin>>x>>y;
join(x,y);
}
int count=-1;
for(i=1;i<=n;i++)
if(bin[i]==i)
count++;
cout<<count<<endl;
}
return 0;
}
数据结构 并查集 HDU 1321
最新推荐文章于 2021-08-21 10:57:37 发布