BFS,DFS都可,但是BFS要记录相关节点的level,不如DFS写起来简洁,DFS就相当于遇到该level,对应的值就++,DFS,BFS都已列出
#include<bits/stdc++.h>
using namespace std;
int N,M;
vector<int> child[110];
int num[110]={0};
int levels[110]={0};
//void DFS(int index,int level)
//{
// num[level]++;
// if(child[index].size()==0)
// return;
// for(int i=0;i<child[index].size();i++)
// {
// DFS(child[index][i],level+1);
// }
//}
void BFS(int index,int level)
{
queue<int> Q;
Q.push(index);
levels[index]=1;
while(!Q.empty())
{
int tmp=Q.front();
num[levels[tmp]]++;
Q.pop();
for(int i=0;i<child[tmp].size();i++)
{
levels[child[tmp][i]]=levels[tmp]+1;
Q.push(child[tmp][i]);
}
}
}
int main()
{
scanf("%d %d",&N,&M);
int ID,K,tmp;
for(int m=0;m<M;m++)
{
scanf("%d",&ID);
scanf("%d",&K);
for(int k=0;k<K;k++)
{
scanf("%d",&tmp);
child[ID].push_back(tmp);
}
}
//DFS(1,1);
BFS(1,1);
int maxLevel=-1,maxNum=0;
for(int n=1;n<N+1;n++)
{
if(num[n]>maxNum)
{
maxNum=num[n];
maxLevel=n;
}
}
printf("%d %d\n",maxNum,maxLevel);
return 0;
}