您的位置:首页 > 其它

[c] poj2524 并查集

2015-09-14 21:10 375 查看
http://poj.org/problem?id=2524

#include<iostream>
#include<stdio.h>
using namespace std;

int a[50050];
int f[50050];

int find(int x){
if(x!=a[x]) a[x]=find(a[x]);
return a[x];
}

int main()
{
int n,m,x,y,num=1;
while(cin>>n>>m){
if(n==0 && m==0) break;
for(int i=1;i<=n;i++){
a[i]=i;
f[i]=0;
}
int re=n;
for(int i=1;i<=m;i++){
cin>>x>>y;
x=find(x);
y=find(y);
if(x==y) continue;
re--;
if(f[x]>f[y]) a[y]=x;
else a[x]=y;
if(f[x]==f[y]) f[y]++;
}
cout<<"Case "<<num<<": "<<re<<endl;
num++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: