Cod sursa(job #871135)

Utilizator andreas_mihAndreas Mihaloianis andreas_mih Data 4 februarie 2013 15:11:42
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#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);
}