Pagini recente » Cod sursa (job #596323) | Cod sursa (job #1287733) | Cod sursa (job #545539) | Diferente pentru info-oltenia-2018/individual/clasament/10 intre reviziile 1 si 4 | Cod sursa (job #2155361)
#include <iostream>
#include <fstream>
using namespace std;
int N, M;
int T [100005];
int D [100005];
void defeu(int nod)
{
for(int i = 1; i <= N; ++i)
if(T[i] == nod)
{
D[i] = D[nod] + 1;
defeu(i);
}
}
int main()
{
ifstream in ("lca.in");
ofstream out ("lca.out");
in>>N>>M;
for(int i = 1; i < N; ++i)
{
int x;
in>>x;
T[i + 1] = x;
}
D[1] = 1;
defeu(1);
for(int i = 1; i <= M; ++i)
{
int x, y;
in>>x>>y;
while(x != y)
if(D[x] > D[y])
x = T[x];
else
y = T[y];
out<<x<<"\n";
}
return 0;
}