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

poj 2524 - Ubiquitous Religions(并查集)

2013-10-22 16:10 387 查看
题意:

统计1-n的宗教信仰的种类,这里假设:没有关系的两个人的信仰肯定是不同的。

思路:

并查集来合并所有有相同信仰的人,最后统计集合的个数即可。

代码如下:

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