您的位置:首页 > 产品设计 > UI/UE

POJ 2524 Ubiquitous Religions 并查集

2011-07-24 14:38 363 查看
题意:给出一些数对,表示这两个人有相同的宗教信仰,现在要求人们信仰的宗教最多有多少种。

题解:并查集。
#include <cstdio>
#include <memory>

int father[50001],r[50001];
int m,n,res;

void make_set ()
{
for ( int i = 1; i <= n; i++ )
father[i] = i;
memset(r,0,sizeof(r));
}

int find_set ( int a )
{
if ( a != father[a] )
father[a] = find_set(father[a]);
return father[a];
}

void Union ( int a, int b )
{
int ta = find_set(a);
int tb = find_set(b);
if ( ta == tb ) return;
res--;
if ( r[ta] > r[tb] )
father[tb] = ta;
else
father[ta] = tb;
if ( r[ta] == r[tb] )
r[tb]++;
}

int main()
{
int i,a,b,cnt=0;
while ( scanf("%d%d",&n,&m) && (m+n) )
{
++cnt; res = n;
make_set();
for ( i = 0; i < m; ++i )
{
scanf("%d%d",&a,&b);
Union(a,b);
}
printf("%s %d%s %d\n", "Case",cnt,":",res);
}
return 0;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: