题目链接:http://xyoj.xynu.edu.cn/problem.php?id=1382
并查集
#include<cstdio>
#include<cstring>
#define N 1005
using namespace std;
int f[N];
void init() {
for(int i=1; i<N; i++)
f[i]=i;
}
int find(int v) {
if(f[v]==v)
return v;
else
return find(f[v]);
}
void add(int x,int y) {
int x1,y1;
x1=find(x);
y1=find(y);
if(x1!=y1)
f[x1]=y1;
}
int main() {
int n,m,a,b;
while(scanf("%d%d",&n,&m)&&n) {
init();
for(int i=1; i<=m; i++) {
scanf("%d%d",&a,&b);
add(a,b);
}
int ans=-1;
for(int i=1; i<=n; i++) {
if(f[i]==i)
ans++;
}
printf("%d\n",ans);
}
}