邻接链表+DFS
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int MAXn=100000+10;
int n,maxm,last;
vector<int> door[MAXn];
int judge[MAXn];
void dfs(int m,int cnt){
if(door[m].size()==0){
if(cnt>maxm){
maxm=cnt;
last=m;
}
return;
}
for(int i=0;i<door[m].size();++i){
dfs(door[m][i],cnt+1);
}
}
int main()
{
cin>>n;
memset(judge,0,sizeof(judge));
for(int i=1;i<=n;++i){
int k,t;
cin>>k;
for(int j=1;j<=k;++j){
cin>>t;
judge[t]=1;
door[i].push_back(t);
}
}
int root;
for(int j=1;j<=n;++j){
if(judge[j]==0){
root=j;
break;
}
}
last=root;
dfs(root,0);
cout<<last;
return 0;
}