Pagini recente » Cod sursa (job #1236195) | Cod sursa (job #2395312) | Cod sursa (job #1421437) | Cod sursa (job #1597193) | Cod sursa (job #567601)
Cod sursa(job #567601)
#include "stdio.h"
#include "stdlib.h"
#define N NULL
typedef struct alma
{
int x;
alma *kov;
}LMA;
alma *t[100010];
alma *p,*q;
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);
p=uj;
while(p->kov)
p=p->kov;
p->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;
kibe->kov=masol(ki->kov,kibe->kov);
return kibe;
}