Pagini recente » Cod sursa (job #224574) | Cod sursa (job #511726) | Cod sursa (job #1905985) | Cod sursa (job #2755375) | Cod sursa (job #2701489)
#include <bits/stdc++.h>
#define MAX_N 100005
using namespace std;
int N, M, T[MAX_N], Lev[MAX_N];
void dfs(int nod, int lev)
{
Lev[nod] = lev;
for(int i = 1; i <= N; ++i)
if(T[i] == nod)
dfs(i, lev+1);
}
int main()
{
ifstream fin ("lca.in");
ofstream fout ("lca.out");
fin >> N >> M;
for(int i = 2; i <= N; ++i)
fin >> T[i];
dfs(1, 0);
for(int i = 1; i <= M; ++i)
{
int x, y;
fin >> x >> y;
while(x != y)
if(Lev[x] > Lev[y])
x = T[x];
else
y = T[y];
cout << x << '\n';
}
}