显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,p[1000005],dep[1000005];
ll cnt[1000005];
vector<ll> e[1000005];
void dfs1(ll x){
dep[x] = dep[p[x]] + 1;
if(!cnt[x])m++;
for(auto i: e[x]){
dfs1(i);
}
}
ll dfs2(ll x){
if(cnt[x]) return dep[x] + 1;
if(x == 0) return 0;
cnt[p[x]]--;
return dfs2(p[x]);
}
int main(){
// freopen("in.in","r",stdin);
freopen("Vocabulary.in","r",stdin);
freopen("Vocabulary.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&p[i]);
cnt[p[i]]++;
e[p[i]].push_back(i);
}
p[0]=0;dep[0]=-1;
dfs1(0);
for(int i=1;i<=m;i++){
ll now;
scanf("%lld",&now);
printf("%lld\n",dfs2(now));
}
return 0;
}