题意:首先给出学生0位嫌疑犯,然后该处几组数据,代表这几个学生之间的关系,判断学生之间嫌疑犯的数量。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxx=30005;
int pre[maxx];
int rank[maxx];
int a[maxx];
int n,k,m;
void init(int n){
for(int i=0;i<=n;i++){
pre[i]=i;
rank[i]=0;
a[i]=0;
}
}
int find(int x){
int r=x;
if(pre[x]==r){
return x;
}
return pre[x]=find(pre[x]);
}
void unio(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx!=fy){
pre[fx]=fy;
}
}
int main(){
while(cin>>n>>m){
if(n==0&&m==0)break;
init(n);
int x;
for(int i=0;i<m;i++){
int k;
cin>>k;
cin>>a[0];
for(int j=1;j<k;j++){
cin>>x;
unio(a[0],x);
}
}
int cnt=1;
int t=find(0);
for(int i=1;i<=n;i++){
if(find(i)==t){
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}