Pagini recente » Cod sursa (job #723123) | Cod sursa (job #3181889) | Cod sursa (job #1601216) | Cod sursa (job #487713) | Cod sursa (job #385427)
Cod sursa(job #385427)
#include<iostream.h>
#include<fstream.h>
long n,m,a[100000],b[100000],c[100000],p,k,l,o,j,x;
void var(long i,long p)
{b[k]=i;
c[k]=p;
k++;
long r=1,ok=0;
while(r<=n)
{if(a[r]==i) {ok=1;
var(r,p+1);
b[k]=i;
c[k]=p;
k++;
}
if(a[r]!=i && ok==1) r=n;
r++;
}
}
void max(long &a,long&b)
{long aux;
if(a>b) {aux=a;
a=b;
b=aux;
}
}
int main()
{
long i;
ifstream f("lca.in");
ofstream h("lca.out");
f>>n>>m;
for(i=2 ;i<=n;i++)
f>>a[i];
var(1,0);
long ok,min;
for(j=1;j<=m;j++)
{f>>l>>o;
max(l,o);ok=0;min=110000;
for(i=1;b[i]!=0;i++)
{ if(b[i]==l) ok=1;
if(ok==1&& min>c[i]) {x=b[i];
min=c[i];
}
if(b[i]==o) {ok=0;break;}
}
h<<x<<endl;
}
return 0;
}