给定族谱,求人数最多的一代的人数和代数。
没什么坑,读进来然后从根节点开始挨个访问赋值层数,过程中计算每层人数,最后找到最大的那一代然后输出就好。id标号是从1到n。
#include <bits/stdc++.h>
using namespace std;
int m,n;
struct Node{
int level=0;
vector<int> children;
}node[105];
int lvnum[105]={0};
void setlevel(int idx,int level){
node[idx].level=level;
lvnum[level]++;
for(int i=0;i<node[idx].children.size();i++){
setlevel(node[idx].children[i],level+1);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int id,num;
scanf("%d%d",&id,&num);
for(int j=0;j<num;j++){
int childid;
scanf("%d",&childid);
node[id].children.push_back(childid);
}
}
setlevel(1,0);
int maxnum=0,maxidx=0;
for(int i=0;i<n;i++){
if(lvnum[i]>maxnum){
maxnum=lvnum[i];
maxidx=i;
}
}
printf("%d %d",maxnum,maxidx+1);
}