Cod sursa(job #2714665)

Utilizator NorbiNORBI KOVER Norbi Data 2 martie 2021 10:48:43
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("lca.in","r");
FILE *g=fopen("lca.out","w");
long n,nrp;
long tati[100001];
void read()
{
    fscanf(f,"%ld%ld",&n,&nrp);
    for(long i=2;i<=n;i++)
    {
        fscanf(f,"%ld",&tati[i]);
    }
}
long FindLca(int x,int y)
{
    while(tati[x]!=tati[y])
    {
        if(tati[x]==y)return y;
        if(tati[y]==x)return x;
        if(x==1||y==1)return 1;
        x=tati[x];
        y=tati[y];
    }
    return tati[x];
}
int main()
{
    read();
    for(int i=1;i<=nrp;i++)
    {
        int x,y;fscanf(f,"%d%d",&x,&y);
        fprintf(g,"%d\n",FindLca(x,y));
    }
    fclose(f);
    fclose(g);
    return 0;
}