Pagini recente » Cod sursa (job #3300230) | Cod sursa (job #3347721) | Cod sursa (job #660875) | Cod sursa (job #3340954) | Cod sursa (job #3308720)
//brut
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("lca.in");
ofstream fout ("lca.out");
const int nmax = 1e5 + 5;
int n, m, t[nmax], h[nmax];
void build (int nod, int x)
{
h[nod] = x;
for (int i = 1; i <= n; i++)
{
if (t[i] == nod)
build (i, x + 1);
}
}
int query (int x, int y)
{
while (x != y)
{
if (h[x] > h[y])
x = t[x];
else
y = t[y];
}
return x;
}
int main ()
{
fin >> n >> m;
for (int i = 2; i <= n; i++)
fin >> t[i];
build (1, 0);
for (int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
fout << query (x, y) << '\n';
}
return 0;
}