思路:建树找到所有结点未被通向的结点即树的根节点,根据题意找到树的层数最高的那个结点即可
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct Node
{
vector<int> child;
}node[100001];
int n,num,e,root,maxlay=-1,ans[100001];
bool vis[100001]={false};
void dfs(int root,int lay)
{
if(lay>maxlay)
{
maxlay=lay;
ans[maxlay]=root;
}
for(int i=0;i<node[root].child.size();i++)
dfs(node[root].child[i],lay+1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num;
for(int j=0;j<num;j++)
{
cin>>e;
vis[e]=true;
node[i].child.push_back(e);
}
}
for(int i=1;i<=n;i++)
if(vis[i]==false)
root=i;
dfs(root,0);
cout<<ans[maxlay]<<endl;
return 0;
}