您的位置:首页 > 其它

并查集模板。。。。

2013-04-22 20:11 232 查看
#include <iostream>
#include <cstdio>
#include <cstring>
int n,m,ans,p[1010];
void Make(int *a){for(int i=1;i<=n;i++)p[i] = i;}
int Find(int x){return x==p[x]?x:(p[x]=Find(p[x]));}
void Union(int x,int y){p[Find(x)]=Find(y); }

int main(){
while (scanf("%d %d", &n, &m) != EOF && n){
Make(p);
while(m--){
int x,y;
scanf("%d%d",&x,&y);
Union(x,y);
}
ans=0;
for(int i=1;i<=n;i++)
if(Find(i)==i)ans++;
printf("%d\n",--ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: