这个题主要考察树的dfs......,我们使用vector建树
#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
const int N = 2e5 + 10;
const int M = 2e4 + 10;
const int mod = 1e9 + 7;
vector<int> g[N];
int d[N],f[N];
bool st[N];
void dfs(int u){
for (auto &j : g[u]) {
d[j] = d[u] + 1;
dfs(j);
}
}
void solve(){
int m,n;
cin>>n>>m;
int r;
for (int i = 1; i <= n; ++i) {
cin>>f[i];
if(f[i] == -1) r = i;
else{
g[f[i]].push_back(i);
}
}
dfs(r);
int v = 0,maxx = 0;
for (int i = 1; i <= m; ++i) {
int x;
cin>>x;
maxx = max(maxx,d[x]);
while (!st[x] && x != r){
st[x] = true;
v += 2;
x = f[x];
}
cout<<v - maxx<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--){
solve();//1 2 3 4 5
}
return 0 ;
}