Pagini recente » Cod sursa (job #2857337) | Cod sursa (job #1599318) | Cod sursa (job #2252285) | Cod sursa (job #2445836) | Cod sursa (job #389566)
Cod sursa(job #389566)
#include<cstdio>
#define N 100001
int gr[N],n,m,d[N],x,y;
void df(int x)
{
if (gr[x]==x)
{
d[x]=1;
return;
}
df(gr[x]);
d[x]=1+d[gr[x]];
}
void solve()
{
if (d[x]<d[y])
{
int aux=x;
x=y;
y=aux;
}
for (;d[x]>d[y];x=gr[x]);
for (;x!=y;x=gr[x],y=gr[y]);
}
void citire()
{
freopen("lca.in","r",stdin);
freopen("lca.out","w",stdout);
scanf("%d%d",&n,&m);
gr[1]=1;
for (int i=2; i<=n; ++i)
{
scanf("%d",&x);
gr[i]=x;
}
for (int i=1; i<=n; ++i)
if (!d[i])
df(i);
while (m--)
{
scanf("%d%d",&x,&y);
solve();
printf("%d\n",x);
}
}
int main()
{
citire();
return 0;
}