每次循环要把ans变成0,这样就过了
```cpp
#include<bits/stdc++.h>
using namespace std;
int fa[1000001],n,m;
int find(int x){
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
void unite(int x,int y){
int f=find(x),j=find(y);
fa[f]=j;
}
int main(){
int x,y;
Begin:
int ans=0;
cin>>n;
if(n==0)return 0;
cin>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;++i){
cin>>x>>y;
unite(x,y);
}
for(int i=1;i<=n;i++){
if(find(i)==i)++ans;
}
cout<<ans-1<<endl;
goto Begin;
}
```
by syp11 @ 2024-02-28 21:45:06