村村通
2024年12月25日小于 1 分钟
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000;
// 并查集
int fa[MAXN + 5];
int cnt[MAXN + 5];
int findFa(int x)
{
if (fa[x] == x)
return x;
return fa[x] = findFa(fa[x]);
}
// ---------
int n, m;
int main()
{
while (cin >> n)
{
if (n == 0)
break;
cin >> m;
// 并查集初始化
for (int i = 1; i <= n; i++)
fa[i] = i;
// 处理 m 组关系
for (int i = 1; i <= m; i++)
{
int u, v;
cin >> u >> v;
int faU = findFa(u);
int faV = findFa(v);
if (faU != faV)
fa[faU] = faV;
}
// 计算答案
int ans = 0;
for (int i = 1; i <= n; i++)
if (fa[i] == i)
ans++;
cout << ans - 1 << "\n";
}
return 0;
}