Cod sursa(job #1673888)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 4 aprilie 2016 10:43:26
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
int n,t[100005],lvl[100005],i,x,y,n1,n2,q,m;
bool viz[100005];
int main()
{
    FILE *f1,*f2;
    f1=fopen("lca.in","r");
    f2=fopen("lca.out","w");
    fscanf(f1,"%d%d",&n,&m);
    for(i=2;i<=n;i++)
        fscanf(f1,"%d",&t[i]);
    for(i=2;i<=n;i++)
        if(viz[i]==false)
        {
            n1=i;q=0;
            viz[i]=true;
            while(t[n1])
            {
                q++;
                n1=t[n1];
                viz[n1]=true;
            }
            n1=i;
            while(t[n1])
            {
                lvl[n1]=q;
                n1=t[n1];q--;
            }
        }
    for(i=0;i<m;i++)
    {
        fscanf(f1,"%d%d",&x,&y);
        while(x!=y)
        {
            if(lvl[x]>lvl[y])
                x=t[x];
            else
                y=t[y];
        }
        fprintf(f2,"%d\n",x);
    }
    return 0;
}