很简单的一道模拟题
2025-10-02 17:38:01
发布于:广东
6阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n;
struct node
{
int fa,mn=INT_MAX;
} a[100005];
int main()
{
int q,p,k,s;
cin >> n >> q;
for (int i=2;i<=n;i++)
{
cin >> p;
a[i].fa=p;
if (i<a[p].mn) //高效求解子节点最小值
a[p].mn=i;
}
while (q--)
{
cin >> s >> k;
while (k--)
{
cin >> p;
if (p>0)
{
while (p--)
{
if (s==1) break;
s=a[s].fa;
}
}
else
{
p=-p;
while (p--)
{
if (a[s].mn==INT_MAX) break;
s=a[s].mn;
}
}
}
cout << s << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个