#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 10009
int father[10009];
void Init()
{
for(int i=0;i<N;i++)
{
father[i]=i;
}
}
int Find(int n)
{
if(father[n]!=n)
{
father[n]=Find(father[n]);
}
return father[n];
}
int Union(int n,int m)
{
if(n!=m)
{
father[n]=m;
}
return 0;
}
int main()
{
int n,m;
while(~scanf("%d",&n))
{
if(n==0)
{
break;
}
scanf("%d",&m);
int a,b;
Init();
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
Union(Find(a),Find(b));
}
int count=0;
for(int i=1;i<=n;i++)
{
if(father[i]==i)
count++;
}
printf("%d\n",count-1);
}
return 0;
}
Graph Theory NO.6 HDU_1232_畅通工程_并查集
猜你喜欢
转载自blog.csdn.net/m0_37862025/article/details/78219733
今日推荐
周排行