Pagini recente » Cod sursa (job #2400504) | Cod sursa (job #301217) | Cod sursa (job #2143277) | Cod sursa (job #2480735) | Cod sursa (job #2213718)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N=100005;
ifstream f("lca.in");
ofstream g("lca.out");
int N, M, T[MAX_N], niv[MAX_N];
void dfs(int,int);
int main()
{
f>>N>>M;
for(int i = 2; i <= N; ++i)
f>>T[i];
dfs(1, 0);
for(int i = 1; i <= M; ++i)
{
int x, y;
f>>x>>y;
while(x != y)
if(niv[x] > niv[y])
x = T[x];
else
y = T[y];
g<<x<<"\n";
}
}
void dfs(int nod, int lev)
{
niv[nod] = lev;
for(int i = 1; i <= N; ++i)
if(T[i] == nod)
dfs(i, lev+1);
}