Pagini recente » Cod sursa (job #3142816) | Cod sursa (job #3123140) | Cod sursa (job #2735760) | Cod sursa (job #2965861) | Cod sursa (job #2656263)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
void dfs(int);
const int N=100005;
vector<int> kids[N];
vector<int> p(1,0);
int T[N],p_end[N];
int main()
{
int n,m;
f>>n>>m;
T[1]=1;
for(int i=2;i<=n;i++)
{
int x;
f>>x;
T[i]=x;
kids[x].push_back(i);
}
dfs(1);
/// for(auto it:p)cout<<it<<' ';
for(;m;m--)
{
int x,y;
f>>x>>y;
while(p_end[x]<p_end[y])
{
x=T[x];
}
g<<x<<endl;
}
return 0;
}
void dfs(int node)
{
p.push_back(-node);
for(auto it:kids[node])dfs(it);
p.push_back(node);
p_end[node]=p.size()-1;
}