bfs或dfs
#include <iostream>
#include <vector>
using namespace std;
#define maxn 110
struct node{
vector<int>children;
int level;
}t[maxn];
int n,m;
int tarLevel=0;
int maxMeb=0;
int level[maxn];
void dfs(int root,int depth){
level[depth]++;
for (int i = 0; i < t[root].children.size(); ++i) {
dfs(t[root].children[i],depth+1);
}
}
void bfs(int root){
node queue[maxn];
int front=0;
int rear=0;
t[root].level=1;
queue[rear++]=t[root];
while(rear!=front){
node temp=queue[front++];
level[temp.level]+=1;
for (int i = 0; i < temp.children.size(); ++i) {
t[temp.children[i]].level=temp.level+1;
queue[rear++]=t[temp.children[i]];
}
}
}
int main(){
cin>>n>>m;
fill(level,level+maxn-1,0);
for (int i = 0; i < m; ++i) {
int id,size,child;
cin>>id>>size;
for (int j = 0; j < size; ++j) {
cin>>child;
t[id].children.push_back(child);
}
}
dfs(1,1);
for (int i = 1; i <= n; ++i) {
if(level[i]>maxMeb){
maxMeb=level[i];
tarLevel=i;
}
}
cout<<maxMeb<<" "<<tarLevel<<endl;
return 0;
}