~题目链接~
http://poj.org/problem?id=2524
输入
10 9 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 10 4 2 3 4 5 4 8 5 8 0 0
结果
Case 1: 1 Case 2: 7
题目概述
1.输入学生数和调查到的案例,输入案例(同组案例信仰同一宗教),输出信仰的最大宗教数
简单并查集
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 50000+10
int flag[maxn],num=0,sum;
int find(int a)
{
if(flag[a]==a)
return a;
else
return find(flag[a]);
}
void set(int i,int j)
{
int x=find(i);
int y=find(j);
if(x==y)
return;
sum--;
if(x!=y)
flag[y]=x;
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m) && n+m!=0)
{
num++;
sum=n;
for(int k=1; k<=n; k++)
flag[k]=k;
while(m--)
{
scanf("%d%d",&i,&j);
set(i,j);
}
printf("Case %d: %d\n",num,sum);
}
return 0;
}