好吧。。。并查集的题太好刷了
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,t,n,m,x,ans,mid,sets[100000];
int find(int x){
int y=x;
if(sets[x]==x) return x;
else{
y=find(sets[x]);
sets[x]=y;
return y;
}
}
int main(){
while(scanf("%d%d",&n,&m),n!=0||m!=0){
for(int i=0;i<n;i++)
sets[i]=i;
for(int i=0;i<m;i++){
/*for(int j=0;j<n;j++)
cout<<sets[j]<<" ";
cout<<endl;*/
scanf("%d",&t);
scanf("%d",&x);
a=find(x);
for(int j=1;j<t;j++){
scanf("%d",&x);
a=find(a);
b=find(x);
sets[a]=sets[b];
}
}
ans=0;
mid=find(0);
for(int i=0;i<n;i++)
if(find(i)==mid)
ans++;
printf("%d\n",ans);
}
return 0;
}