Pagini recente » Cod sursa (job #1852539) | Cod sursa (job #557726) | Cod sursa (job #1398404) | Cod sursa (job #867776) | Cod sursa (job #871135)
Cod sursa(job #871135)
#include<stdio.h>
#include<vector>
using namespace std;
FILE*in=fopen("lca.in","r");
FILE*out=fopen("lca.out","w");
int tata[100001],nivel[100001],noduri,query;
int main()
{
fscanf(in,"%d%d",&noduri,&query);
for(int i=2;i<=noduri;++i)
{
fscanf(in,"%d",&tata[i]);
nivel[i]=nivel[tata[i]]+1;
}
for(int i=0;i<query;++i)
{
int nod1,nod2;
fscanf(in,"%d%d",&nod1,&nod2);
if(nivel[nod1]>nivel[nod2])
{
int ajutor;
ajutor=nod1;
nod1=nod2;
nod2=ajutor;
}
while(nivel[nod2]!=nivel[nod1])
{
nivel[nod2]=nivel[tata[nod2]];
nod2=tata[nod2];
}
if(nod1==nod2)
fprintf(out,"%d\n",nod1);
else
{
while(tata[nod1]!=tata[nod2])
{
nod2=tata[nod2];
nod1=tata[nod1];
}
fprintf(out,"%d\n",tata[nod1]);
}
}
fclose(in);
fclose(out);
}