题解 | #畅通工程#
畅通工程
https://www.nowcoder.com/practice/4878e6c6a24e443aac5211d194cf3913
#include <iostream>
using namespace std;
const int N=1010;
int p[N];
int find(int x){
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int main() {
int n,m;
while(cin>>n>>m&&n){
//规定根节点p[i]=i
for(int i=1;i<=n;i++) p[i]=i;
int cnt=n;//初始时有n个独立的集合
while(m--){
int a,b;
cin>>a>>b;
if(find(a)!=find(b)){
p[find(a)]=find(b);
cnt--;
}
}
cout<<cnt-1<<endl;
}
return 0;
}