求一大家子哪一辈的人数最多。
直接层序遍历,然后统计。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define MAX 110
using namespace std;
int n,m;
struct node{
int level;
vector <int> next;
};
node t[MAX];
int LevelCount[MAX];
int maxSize = 1;
int maxLevel = 1;
void LevelOrder(int root){
queue <int> q;
t[root].level = 1;
q.push(root);
LevelCount[t[root].level]++;
while(!q.empty()){
int top = q.front();
q.pop();
for(int i = 0 ; i < t[top].next.size();i++){
int cno = t[top].next[i];
t[cno].level = t[top].level + 1;
LevelCount[t[cno].level]++;
if(LevelCount[t[cno].level] > maxSize){
maxSize = LevelCount[t[cno].level];
maxLevel = t[cno].level;
}
q.push(cno);
}
}
}
int main(){
cin >> n >> m;
int no,size,cno;
for(int i = 0 ;i < m ; i++){
cin >> no >> size;
for(int j = 0 ; j < size ;j++){
cin >> cno;
t[no].next.push_back(cno);
}
}
LevelOrder(1);
cout << maxSize << " " << maxLevel << endl;
return 0;
}