Files
luogu/P10109.cpp
T
2026-07-15 16:36:42 +08:00

64 lines
1.1 KiB
C++

#include <bits/stdc++.h>
using namespace std;
int n;
int fa[305];
vector<int> so[305];
int a[305];
bool vis[305];
int de[305];
void dfs(int now, int dep)
{
vis[now] = 1;
de[now] = dep;
for (int i : so[now])
{
if (!vis[i])
dfs(i, dep + 1);
}
}
int l(int a, int b)
{
while (de[a] > de[b])
a = fa[a];
while (de[a] < de[b])
b = fa[b];
while (a != b)
a = fa[a], b = fa[b];
return a;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i < n; ++i)
{
cin >> fa[i];
so[fa[i]].push_back(i);
}
dfs(0, 0);
int q;
cin >> q;
while (q--)
{
int m;
cin >> m;
for (int i = 1; i <= m; ++i)
{
cin >> a[i];
}
int lca = a[1];
for (int i = 2; i <= m; ++i)
{
lca = l(lca, a[i]);
}
int mx = lca;
while (lca != 0)
{
lca = fa[lca];
mx = max(lca, mx);
}
cout << mx << endl;
}
return 0;
}