题目地址
水题 求有多少个集合
#include<iostream>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=50000+5;
int p[maxn];
int ans=0;
int getParent(int x){if(p[x]==x) return x;int xp=getParent(p[x]);return p[x]=xp;
}void merge(int x,int y)
{int xp=getParent(x);int yp=getParent(y);if(xp==yp) return;ans--;p[yp]=xp;
}
int main()
{int n,m,kase=0;while(cin>>n>>m&&n){for(int i=1;i<=n;i++) p[i]=i;ans=n;int x,y;while(m--){cin>>x>>y;merge(x,y);}printf("Case %d: %d\n",++kase,ans);}return 0;
}