简单BFS,要注意判断每一层开始的标志
#include<stdio.h>
#include<vector>
#include<queue>
#define SIZE 105
using namespace std;
vector<int> family[SIZE];
queue<int>q;
int maxgen, gen;
void bfs(int n){
maxgen = 0;
gen = 0;
int i = 0;
int generation = 1,index = 0,count = 1;
q.push(0);
//count = family[0].size();
vector<int>::iterator it;
while (!q.empty()){
if (index == q.front()){
if (count > maxgen){
maxgen = count;
gen = generation;
}
generation++;
count = 0;
while (!q.empty()&&family[index].size() == 0){
index = q.front();
q.pop();
}
if (q.empty())
break;
index = family[index][0];
}
i = q.front();
q.pop();
count += family[i].size();
for (it = family[i].begin(); it != family[i].end(); it++)
q.push(*it);
}
}
int main(){
freopen("1.in", "r", stdin);
int n, m;
scanf("%d%d", &n, &m);
int i,j,parent,id,numofchild;
for (i = 0; i < m; i++){
scanf("%d%d",&parent, &numofchild);
for (j = 0; j < numofchild; j++){
scanf("%d", &id);
family[parent-1].push_back(id-1);
}
}
bfs(n);
printf("%d %d\n", maxgen, gen);
return 0;
}