越发感觉到自己的菜,大体的思路会写,但总是有一些卡住的地方,归根结底还是题做的少了。
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int e[N],ne[N],idx,h[N];
int n;
bool st[N],ent[N];
int dist; // 最短距离
int res; // 门的编号
void add(int a, int b){ // 记录从a扇门可以到达哪扇门
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
void dfs(int s,int len){
st[s] = true;
// cout << "编号:" << s << " " << "距离:" << len << endl;
if(h[s] == -1){
// puts("进入");
if(len > dist) dist = len,res = s;
return;
}
for(int i = h[s]; i != -1; i = ne[i]){
if(!st[e[i]]) st[e[i]] = true,dfs(e[i],len+1);
}
}
int main(){
cin >> n;
memset(h,-1,sizeof h);
for(int i = 1; i <= n; i++) {
int k;
cin >> k;
while(k--){
int x;
cin >> x;
add(i,x);
ent[x] = true; // 有门通向他,说明它不是入口
}
}
for(int i = 1; i <= n; i++){
if(!ent[i]){
dfs(i,1);
}
}
cout << res << endl;
return 0;
}