思路
本题思路主要是通过层次遍历得出每一个结点的层次,接着求出同一层次结点的个数,最后便可以得出答案
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
const int maxen = 110;
using namespace std;
struct node
{
int layer;
vector<int> child;
}Node[maxen];
void BFS(int root);
int main()
{
int n,m;
int id,num,temp;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&id,&num);
for(int j=0;j<num;j++)
{
scanf("%d",&temp);
Node[id].child.push_back(temp);
}
}
BFS(1);
int hashTable[maxen]={0}; //用来记录同层次的结点个数
for(int i=1;i<=n;i++)
{
hashTable[Node[i].layer]++;
}
int MaxIndex=0,MaxSum=0;
for(int i=1;i<=n;i++)
{
if(MaxSum<hashTable[i])
{
MaxSum=hashTable[i];
MaxIndex = i;
}
}
printf("%d %d",MaxSum,MaxIndex);
return 0;
}
void BFS(int root)
{
queue<int> q;
q.push(root);
Node[root].layer=1;
while(!q.empty())
{
int front = q.front();
q.pop();
for(int i=0;i<Node[front].child.size();i++)
{
int child = Node[front].child[i];
Node[child].layer = Node[front].layer+1;
q.push(child);
}
}
}