现在的位置: 首页 > 综合 > 正文

noj 1286 - 宗教 (并查集)

2018年03月17日 ⁄ 综合 ⁄ 共 783字 ⁄ 字号 评论关闭
题意:n个人中,有m对人的宗教是相同的,给出m对人宗教相同人的编号,求他们中有多少种不同的宗教信仰

思路:并查集

第一次用并查集,原先打算把parent 初始化为-1 
发现这样统计宗教种类太麻烦   于是套用 依然 的一种方法 嘻嘻~
比方便统计

#include "stdio.h"
#define M 50005

int find (int parent[],int v)
{
    int t
;
    t = v;
    while
(parent[t] != t)
       
t = parent[t];
    return
t;
}
int main ()
{
    int
i,n,m,v1,v2,x,y;
    int count =
1;
    while
(1)
    {
       
scanf ("%d %d",&n,&m);
       
if (!n&&!m)
           
break;
       
int parent[M];
       
for (i = 1;i <= n;i ++)
           
parent[i] = i;
       
for (i = 0;i < m;i ++)
       
{
           
scanf ("%d%d",&v1,&v2);
           
x = find (parent,v1);
           
y = find (parent,v2);
           
if (x != y)
               
parent[y] = x;
       
}
       
int sum = n;

       
for (i = 1;i <= n;i ++)
           
if (parent[i] !=
i)     
//只要他的宗教跟自己原来的不同,证明他跟别人有相同的宗教
               
sum --;
       
printf ("Case %d: %d\n",count++,sum);
    }
    return
0;
}

抱歉!评论已关闭.