Pagini recente » Cod sursa (job #2889483) | Cod sursa (job #802164) | Cod sursa (job #609633) | Cod sursa (job #2740741) | Cod sursa (job #2907016)
#include<bits/stdc++.h>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int n,m,v[100005],niv[100005];
vector<int>w[100005];
void dfs(int nod, int nivel)
{
int i;
niv[nod]=nivel;
for(auto it:w[nod])
{
dfs(it,nivel+1);
}
}
int main()
{
int i,x,y;
cin>>n>>m;
for(i=2;i<=n;i++)
{
cin>>v[i];
w[v[i]].push_back(i);
}
dfs(1,0);
for(i=1;i<=n;i++)
{
cout<<i<<" "<<niv[i]<<'\n';
}
for(i=1;i<=m;i++)
{
cin>>x>>y;
if(niv[x]<niv[y])
{
while(niv[x]<niv[y])
{
y=v[y];
}
}
else
{
while(niv[x]>niv[y])
{
x=v[x];
}
}
while(x!=y)
{
x=v[x];
y=v[y];
}
cout<<x<<'\n';
}
return 0;
}