题意:给出一些在一个集合的元素信息,求一共有多少个无交集的集合
题解:并查集,初始集合个数为人数,在合并集合的过程中,每次在一个集合里合并了一个人,集合个数就减一
#include <iostream>
#include <cstring>
using namespace std;
const int maxn =50000+5;
int fa[maxn];
int Find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=Find(fa[x]);
}
void Bind(int x,int y)
{
int fx=Find(x);
int fy=Find(y);
if(fx!=fy)
fa[fx]=fy;
return;
}
int main()
{
int n,m,x,y;
int kase=0;
while(cin>>n>>m,n,m)
{
for(int i=1;i<=n;i++)
fa[i]=i;
while(m--)
{
cin>>x>>y;
Bind(x,y);
}
int ans=0;
for(int i=1;i<=n;i++)
{
int t=Find(i);
if(fa[i]==i)
ans++;
}
cout<<"Case "<<++kase<<": "<<ans<<endl;
}
}