#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
#define maxn 1000 + 10
int p[maxn], n, m;
//bool mark[maxn];
//int Rank[maxn];
void init()
{
for(int i=1; i<=n; i++)
p[i] = i;
//memset(Rank, 0, sizeof(Rank));
// memset(mark, false, sizeof(mark));
}
int find(int x)
{
return x == p[x] ? x : p[x] = find(p[x]);
}
int main()
{
while(~scanf("%d", &n) && n)
{
cin>>m;
int cnt = n - 1;
init();
while(m--)
{
int a, b;
scanf("%d%d", &a, &b);
int x = find(a);
int y = find(b);
/*
if(x != y)
{
if(Rank[x] > Rank[y])
p[y] = x;
else
{
p[x] = y;
if(Rank[x] == Rank[y])
Rank[y]++;
}
}
*/
if(x != y)
{
p[x] = y;
cnt--;
}
}
/*
for(int i=1; i<=n; i++)
{
int a = p[i];
//cout<<a<<" ";
if(!mark[a])
{
cnt++;
mark[a] = true;
}
}
cout<<cnt - 1<<endl;
*/
cout<<cnt<<endl;
}
return 0;
}
HDU 1232
最新推荐文章于 2019-06-29 14:23:42 发布