Pagini recente » Cod sursa (job #83335) | Cod sursa (job #2780411) | Cod sursa (job #87030) | Cod sursa (job #95121) | Cod sursa (job #1832924)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
#include <stdio.h>
#include <utility>
#include <stdlib.h>
#include <dirent.h>
using namespace std;
int size, operations, a;
int main() {
freopen("lca.in", "r", stdin);
freopen("lca.out", "w", stdout);
scanf("%d %d", &size, &operations);
vector<int> parents(size + 1);
vector<int> levels(size + 1);
for (int i = 2; i <= size; i ++) {
scanf("%d", &a);
parents[i] = a;
}
for (int i = 2; i <= size; i ++)
levels[i] = levels[parents[i]] + 1;
for (int i = 0; i < operations; i ++) {
int u, v;
scanf("%d %d", &u, &v);
while (u != v) {
if (levels[u] > levels[v])
u = parents[u];
else v = parents[v];
}
printf("%d\n", u);
}
return 0;
}