Pagini recente » Cod sursa (job #3205064) | Cod sursa (job #548764) | Cod sursa (job #1574684) | Diferente pentru implica-te/arhiva-educationala intre reviziile 112 si 111 | Cod sursa (job #567609)
Cod sursa(job #567609)
#include "stdio.h"
#include "stdlib.h"
#define N NULL
typedef struct alma
{
int x;
alma *kov;
}LMA;
alma *t[100010];
alma *p,*q;
alma *veg;
alma *masol(alma *ki,alma *kibe);
int n,m,i,a,b,kicsoda;
int main()
{
freopen("lca.in","r",stdin);
freopen("lca.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
t[i]=(alma*)malloc(sizeof(alma));
t[i]->x=i;
t[i]->kov=N;
}
for(i=2;i<=n;i++)
{
scanf("%d",&a);
alma *uj=N;
uj=masol(t[a],uj);
veg->kov=t[i];
t[i]=uj;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
p=t[a];
q=t[b];
int ok=1;
while(p&&q&&ok)
{
if(p->x==q->x)
{
kicsoda=p->x;
p=p->kov;
q=q->kov;
}
else ok=0;
}
printf("%d\n",kicsoda);
}
return 0;
}
alma *masol(alma *ki,alma *kibe)
{
if(ki==N)return N;
kibe=(alma*)malloc(sizeof(alma));
kibe->x=ki->x;
kibe->kov=N;
veg=kibe;
kibe->kov=masol(ki->kov,kibe->kov);
return kibe;
}