题意: 求解与0有关系的所有人 ->并查集求解
Code:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 30005;
int fa[maxn], n, m;
void init(){
for(int i=0; i<=n; i++){
fa[i]=i;
}
return ;
}
int find(int a){
if(fa[a]==a)return a;
fa[a]=find(fa[a]);
return fa[a];
}
void Union(int a, int b){
int f1 = find(a);
int f2 = find(b);
if(f1!=f2){
fa[f1]=f2;
}
return ;
}
int main()
{
//freopen("in.txt", "r", stdin);
while(~scanf("%d %d", &n, &m), n||m){
init();
int i, j, k;
int x, y;
while(m--){
scanf("%d", &k);
scanf("%d", &y);
for(i=2; i<=k; i++){
scanf("%d", &x);
Union(x, y);
y = x;
}
}
int ans=1;
int p = find(0);//0的那组的编号
for(i=1; i<=n; i++){
if(fa[i]==i && fa[i]!=p) continue;
if(find(i)==p) {//和0同组
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}