您的位置:首页 > 理论基础 > 数据结构算法

数据结构复习----并查集:poj Ubiquitous Religions

2015-01-23 18:06 483 查看
//数据结构---并查集复习
//C++源代码
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;

int b[500000];
int find(int x)
{
int r=x;
int i;
int j;
while(b[r]!=r)
r=b[r];
i=x;
while(i!=r)
{
j=b[i];
b[i]=r;
i=j;
}
return r;
}

void add(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
b[fx]=fy;
}

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