new file: P10109.cpp
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
|||||||
|
#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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user