POJ 2524 Ubiquitous Religions 【并查集】
解题思路:输入总人数 n,和m组数据;即和杭电畅通工程相类似,对这m组数据做合并操作后,求最后一共有多少块区域。
#include<stdio.h>
int pre[50001];
int find(int root)
{
if(root!=pre[root])
pre[root]=find(pre[root]);
return pre[root];
}
void unionroot(int x,int y)
{
int root1,root2;
root1=find(x);
root2=find(y);
if(x!=y)
{
pre[root1]=root2;
}
}
int main()
{
int n;
int i;
int x,y;
long int m;
int tag=1;
while(scanf("%d %d",&n,&m)!=EOF&&(n||m))
{
int sum=0;
for(i=0;i<n;i++)
pre[i]=i;
while(m--)
{
scanf("%d %d",&x,&y);
unionroot(x,y);
}
for(i=0;i<n;i++)
{
if(find(i)==i)
sum++;
}
printf("Case %d: %d\n",tag,sum);
tag++;
}
}

浙公网安备 33010602011771号