可能是我一是脑抽,勿喷……
代码如下:
#include <cstdio>
#include <vector>
using namespace std;
const int N = 5e6 + 5;
int n, m, f, ans[N], fa[N], depth[N];
vector<int> v[N];
int find(int u)
{
if (u == fa[u])
{
return u;
}
fa[u] = find(fa[u]);
return fa[u];
}
void tarjan(int u, int fa)
{
depth[u] = depth[fa] + 1;
for (register auto it: v[u])
{
tarjan(it, u);
fa[it] = u;
}
if (ans[depth[u]])
{
ans[depth[u]] = find(ans[depth[u]]);
}
else
{
ans[depth[u]] = u;
}
}
int main()
{
scanf("%d%d", &n, &m);
for (register int i = 1; i <= n; ++i)
{
scanf("%d", &f);
v[i].push_back(f);
}
tarjan(1, 0);
while (m--)
{
scanf("%d", &f);
printf("%d\n", ans[f]);
}
return 0;
}