http://poj.org/problem?id=2524
题目大意是有n个同学,m对是信仰同一宗教的,问有多少不同宗教。
又是一道娱乐身心的裸并查集,ans先赋为n,查到不同的就ans–。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,ans,cas;
int fa[50010];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int main()
{
scanf("%d%d",&n,&m);
while(n!=0)
{
ans=n;
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
ans--;
fa[fx]=fy;
}
}
printf("Case %d: %d\n",++cas,ans);
scanf("%d%d",&n,&m);
}
return 0;
}