L2-031 深入虎穴 (25分) 邻接表+dfs
找到入口,然后进行DFS
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e+5+1;
vector<int> v[maxn];
int mmax=1,flag;
int f[maxn]={0};
void dfs(int i,int a){
if(a>=mmax){
mmax=a;
flag=i+1;
}
for (int j = 0; j < v[i].size(); ++j) {
dfs(v[i][j],a+1);
}
}
int main() {
ios::sync_with_stdio(false);
int t;
cin>>t;
for (int i = 0; i < t; ++i) {
int n;
cin>>n;
while(n--){
int k;
cin>>k;
f[k-1]=1;
v[i].push_back(k-1);
}
}
int in;
for(int i=0;i<t;i++){
if(f[i]==0) in=i;
}
dfs(in,1);
cout<<flag;
return 0;
}