Pagini recente » Cod sursa (job #3001258) | Cod sursa (job #183389) | Cod sursa (job #120752) | Cod sursa (job #2330959) | Cod sursa (job #385374)
Cod sursa(job #385374)
#include<stdio.h>
int n,m,v[100005],ecl[200005],inl[200005],i,n1,n2,k,j;
void parcurgere(int q,int p)
{
int f;
for(f=1;f<=n;f++)
if(v[f]==q)
{
ecl[k]=f,inl[k]=p,k++;
parcurgere(f,p+1);
ecl[k]=v[f],inl[k]=p-1,k++;
}
}
void count(int x,int y)
{
int min=2000000000,mini=2000000000;
for(int t=x;t<k;t++)
{
if(inl[t]<mini)min=ecl[t],mini=inl[t];
if(ecl[t]==y)
{
printf("%d\n",min);
return;
}
}
}
int main()
{
freopen("lca.in","r",stdin);
freopen("lca.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=2;i<=n;i++)
scanf("%d",&v[i]);
parcurgere(0,0);
for(i=0;i<m;i++)
{
scanf("%d %d",&n1,&n2);
for(j=0;j<k;j++)
if(ecl[j]==n1)
{
count(j,n2);
break;
}
else if(ecl[j]==n2)
{
count(j,n1);
break;
}
}
return 0;
}