???求解???
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000+5
int fa[MAXN];
int find(int x)
{
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
void join(int c1,int c2)
{
if(find(c1)!=find(c2))
fa[find(c1)]=find(c2);
}
int read()
{
int x=0;
char n;
while(1){
n=getchar();
if(n<'0'||n>'9') return x;
else x=x*10+int(n-'0');
}
}
void print(int x)
{
if(x>9) print(x/10);
putchar(x%10+'0');
}
int main()
{
while(1){
int ans=0;
memset(fa,0,sizeof(fa));
int n,m;
int tot=m;
n=read();
if(!n) break;
m=read();
for(int i=1;i<=n;i++) fa[i]=i;
while(m--){
int x,y;
x=read(),y=read();
join(x,y);
}
for(int i=1;i<=n;i++){
if(find(i)==i) ans++;
}
ans--;
print(ans);
printf("\n");
}
return 0;
}