Pagini recente » Cod sursa (job #3249333) | Cod sursa (job #3196605) | Cod sursa (job #1798426) | Cod sursa (job #2743811) | Cod sursa (job #1673888)
#include <stdio.h>
int n,t[100005],lvl[100005],i,x,y,n1,n2,q,m;
bool viz[100005];
int main()
{
FILE *f1,*f2;
f1=fopen("lca.in","r");
f2=fopen("lca.out","w");
fscanf(f1,"%d%d",&n,&m);
for(i=2;i<=n;i++)
fscanf(f1,"%d",&t[i]);
for(i=2;i<=n;i++)
if(viz[i]==false)
{
n1=i;q=0;
viz[i]=true;
while(t[n1])
{
q++;
n1=t[n1];
viz[n1]=true;
}
n1=i;
while(t[n1])
{
lvl[n1]=q;
n1=t[n1];q--;
}
}
for(i=0;i<m;i++)
{
fscanf(f1,"%d%d",&x,&y);
while(x!=y)
{
if(lvl[x]>lvl[y])
x=t[x];
else
y=t[y];
}
fprintf(f2,"%d\n",x);
}
return 0;
}