题意: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;
}
思路:并查集
第一次用并查集,原先打算把parent 初始化为-1
#include "stdio.h"
#define M 50005
int find (int parent[],int v)
{
}
int main ()
{
}