Pagini recente » Cod sursa (job #2497668) | Cod sursa (job #2336604) | Cod sursa (job #754980) | Cod sursa (job #2350138) | Cod sursa (job #1830734)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int level[NMAX], dad[NMAX], N, M, node1, node2;
void dfs(int node, int _level) {
level[node] = _level;
for (int i = 1; i <= N; ++i) {
if (dad[i] == node) {
dfs(i, _level + 1);
break;
}
}
}
int main() {
f >> N >> M;
for (int i = 2; i <= N; ++i) {
f >> dad[i];
}
dfs(1, 0);
for (int i = 0; i < M; ++i) {
f >> node1 >> node2;
while (node1 != node2) {
if (level[node1] > level[node2]) {
node1 = dad[node1];
} else {
node2 = dad[node2];
}
}
g << node1 << '\n';
}
f.close();
g.close();
return 0;
}