From 05b3e91ab079da2e19a158aba1ddb7bf334198e9 Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Wed, 15 Jul 2026 16:36:42 +0800 Subject: [PATCH] new file: P10109.cpp --- P10109.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 P10109.cpp diff --git a/P10109.cpp b/P10109.cpp new file mode 100644 index 0000000..0e3c8a3 --- /dev/null +++ b/P10109.cpp @@ -0,0 +1,64 @@ +#include +using namespace std; +int n; +int fa[305]; +vector 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; +} \ No newline at end of file