Cod sursa(job #2716011)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 4 martie 2021 15:46:28
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("lca.in");
ofstream out("lca.out");

const int Max=100005;
int tata[Max],niv[Max],n,m;

struct node
{
    int val;
    struct node  *next;
}*v[Max];

void add(int x,int y)
{
    node *p=new node;
    p->val=y;
    p->next=v[x];
    v[x]=p;

}

void dfs(int nod,int t=0)
{
    niv[nod]=niv[t]+1;
    for(struct node *i=v[nod];i;i=i->next)
        dfs(i->val,nod);
}


void citire()
{
    in>>n>>m;
    for(int i=2;i<=n;i++)
    {
        int x;
        in>>x; tata[i]=x;
        add(x,i);
    }
}

void solve()
{
    for(int i=1;i<=m;i++)
    {
        int x,y;
        in>>x>>y;

        while(x!=y)
        {
            if(niv[x]>niv[y])
                x=tata[x];
            else
                y=tata[y];
        }

        out<<x<<"\n";
    }

}


int main() {

    citire();
    dfs(1);
    solve();
    return 0;
}