[洛谷P1536]村村通
题意:多组数据,当n为0时结束,每组数据表示有n个村子,m条路,求还需要建多少条路,使得所有的村子联通
题解:用并查集求出有多少个联通块,然后求解
C++ Code:
#include<cstdio>
using namespace std;
const int maxn=1010;
int n,m,ans;
int f[maxn];
int find(int x){return (x==f[x]?x:(f[x]=find(f[x])));}
int main(){
scanf("%d",&n);
while(n!=0){
scanf("%d",&m);
for (int i=0;i<=n;i++)f[i]=i;
ans=n-1;
for (int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
int x=find(a),y=find(b);
if (x!=y){
f[x]=f[y];
ans--;
}
}
printf("%d\n",ans);
scanf("%d",&n);
}
return 0;
}

浙公网安备 33010602011771号