并查集问题。
题意是说 有不同的宗教信仰。在调查的时候,学生不愿说出来,只是说和某些人一样。
然后你的目的就是调查出到底有多少种宗教信仰。
相同就合并,最后扫描一遍。
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
using namespace std;
int n,m;
int fa[50001];
int father(int x)
{
if(x!=fa[x])
return fa[x]=father(fa[x]);
}
int main()
{
int cot=1;
while(scanf("%d%d",&n,&m),n||m)
{
for(int i=0;i<=n;i++)
fa[i]=i;
int a,b;
while(m--)
{
scanf("%d%d",&a,&b);
a=father(a),b=father(b);
if(a==b)continue;
fa[b]=a;
}
int ans=0;
for(int i=1;i<=n;i++)
if(fa[i]==i)ans++;
printf("Case %d: %d\n",cot++,ans);
}
}