解题思路:记录树的层次,采用BFS进行搜索,同时更新每一个节点所在的层次,最后统计相同层次节点个数取最大值,输出最大值和层次。
代码如下:
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
int n,m;
int ans[105];
struct node{
vector<int> child;
int layer;
}g[105];
int main() {
CLR(ans);
cin>>n>>m;
int fa,k,tmp;
for(int i=0;i<m;i++){
cin>>fa>>k;
for(int j=0;j<k;j++){
cin>>tmp;
g[fa].child.push_back(tmp);
}
}
g[1].layer=1;
queue<node> q;
q.push(g[1]);
while(!q.empty()){
node head=q.front();
q.pop();
for(int i=0;i<head.child.size();i++){
int v=head.child[i];
g[v].layer=head.layer+1;
q.push(g[v]);
}
}
int maxchild=1;
int level=1;
for(int i=1;i<=n;i++){
ans[g[i].layer+1]+=g[i].child.size();
}
for(int i=1;i<=n;i++){
if(ans[i]>maxchild){
maxchild=ans[i];
level=i;
}
}
cout<<maxchild<<' '<<level<<endl;
return 0;
}