考点:存树、BFS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int N = 105, M = 1e5 + 5;
int h[N], to[M], ne[M], q[M], idx;
int n, m;
void add(int parent, int child){
to[idx] = child, ne[idx] = h[parent], h[parent] = idx++;
}
void bfs(){
int f, r;
f = 0, r = 0;
q[r++] = 1;
while(r != f){
int s = r - f;
int cnt = 0;
for(int i = 0; i < s; i++){
int node = q[f++];
if(h[node] == -1) cnt++;
for(int j = h[node]; ~j; j = ne[j]){
q[r++] = to[j];
}
}
printf("%d", cnt);
if(r != f) printf(" ");
}
}
int main(void){
scanf("%d %d", &n, &m);
int ID, K, child;
memset(h, -1, sizeof(h));
for(int i = 0; i < m; i++){
scanf("%d %d", &ID, &K);
for(int j = 0; j < K; j++){
scanf("%d", &child);
add(ID, child);
}
}
bfs();
return 0;
}