[洛谷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; }