代码好像没问题,但全都WA了,帮我看看吧
```c++
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int maxn=2e5+2;
int n,a[maxn],q,t,u,k; // n为节点数,a数组存储DFS序,q为查询次数,t为DFS时间戳
// 树节点结构,包含子节点列表和DFS访问的左右边界
struct node {
vector<int>e; // 存储子节点的列表
int l,r; // 节点在DFS序列中的左右边界
} v[maxn];
// 深度优先遍历,生成树的DFS序(欧拉序)
// x: 当前遍历的节点
void dfs(int x) {
a[++t]=x; // 记录DFS访问顺序到数组a中
v[x].l=t; // 记录节点x的左边界(首次访问时间)
sort(v[x].e.begin(),v[x].e.end()); // 对子节点排序,保证按编号升序访问
for(auto i:v[x].e) dfs(i); // 递归访问所有子节点
v[x].r=t; // 记录节点x的右边界(最后访问时间)
}
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); // 加速输入输出
cin>>n>>q; // 输入节点数和查询次数
// 构建树结构(邻接表)
for(int i=2,x; i<=n; i++) {
cin>>x; // 输入节点i的父节点
v[x].e.push_back(i); // 将节点i添加到父节点x的子节点列表中
}
dfs(1); // 从根节点1开始DFS遍历,生成DFS序
// 处理查询
while(q--){
cin>>u>>k; // 查询节点u的第k个直属子节点
// 计算在DFS序中对应的位置
int pos=v[u].l+k-1;
// 判断位置是否在节点u的DFS区间内
if(pos<=v[u].r) cout<<a[pos]<<endl; // 若在区间内,输出对应节点
else cout<<-1<<endl; // 否则输出-1表示不存在
}
return 0;
}
```