Cod sursa(job #385425)

Utilizator Scorpion[email protected] Scorpion Data 22 ianuarie 2010 18:20:26
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#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("date.in");
ofstream h("date.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;
}