Pagini recente » Cod sursa (job #529388) | Cod sursa (job #1021707) | Cod sursa (job #715662) | Cod sursa (job #2919723) | Cod sursa (job #1984200)
#include <bits/stdc++.h>
using namespace std;
vector <int> t;
vector <int> depth;
int lca(int u, int v)
{
while(depth[u]!=depth[v])
{
if(depth[u]>depth[v])
u=t[u];
else
v=t[v];
}
while(u!=v)
{
u=t[u];
if(u==v)
return u;
v=t[v];
}
return u;
}
int main()
{
freopen("lca.in", "r", stdin);
freopen("lca.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
t.push_back(0);
t.push_back(0);
depth.push_back(0);
depth.push_back(0);
for(int i=2;i<=n;i++)
{
int nr;
scanf("%d", &nr);
t.push_back(nr);
depth.push_back(depth[nr]+1);
}
for(int i=1;i<=m;i++)
{
int u, v;
scanf("%d%d", &u, &v);
printf("%d\n", lca(u, v));
}
return 0;
}