POJ1611 The Suspects
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,par[30001];
//初始化n个元素
void init(int n){
for(int i=0;i<n;i++){
par[i]=i;
}
}
int find(int x){
if(par[x]==x){
return x;
}else{
return par[x]=find(par[x]);
}
}
void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y)
return;
if(x!=y){
par[x]=y;
}
}
bool same(int x,int y){
return find(x)==find(y);
}
int main(){
int x,y,k;
// freopen("data","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){
init(n);
for(int i=0;i<m;i++){
//给出集合每个集合人数以及第一个人的编号
scanf("%d%d",&k,&x);
k--;
while(k--){
scanf("%d",&y);
unite(x,y);
}
}
int sum=0;
for(int i=0;i<n;i++)
if(find(i)==par[0])
sum++;
printf("%d\n",sum);
}
return 0;
}
Smaple Input
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
Smaple Output
4
1
1