Cod sursa(job #2954579)

Utilizator and_Turcu Andrei and_ Data 14 decembrie 2022 21:00:40
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
#define N 100007
using namespace std;

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

int n,q,ct,ntur,nrmq;
vector<int> a[N];
vector<int> ultima(N,0);
vector<int> ordine(2*N,0);
vector<int> adancime(2*N,0);
int tabel[20][2*N+1];


void parcurs_in_tur(int x,int nivel)
{
    ultima[x]=++ct;
    ordine[ct]=x;
    adancime[ct]=nivel;
}



void tur_eulerian(int x,int nivel)
{
    parcurs_in_tur(x,nivel);

    for( auto y:a[x] )
    {
        tur_eulerian(y,nivel+1);
        parcurs_in_tur(x,nivel);
    }
}

void RMQ()
{
    for(; (1<<nrmq)<=ntur ;nrmq++);
    if( !(1<<nrmq)!=ntur )nrmq--;
    for(int i=0;i<=nrmq;i++)
        tabel[i][0]= (1<<i);
//    for(int i)

}



void Citire_t()
{
    fin >> n >> q;
    for(int i=2;i<=n;i++)
    {
        int x;
        fin >> x;
        a[x].push_back(i);
    }
    tur_eulerian(1,0);
    ntur=n*2-1;
    RMQ();
//    for(int i=1;i<=2*n-1;i++)cout << ordine[i] <<" ";
//    cout << "\n";
//    for(int i=1;i<=2*n-1;i++)cout << adancime[i] <<" ";


//    for(int i=1;i<=q;i++)
//    {
//        int x,y;
//        fin >> x >> y;
//        Ans(x,y);
//    }
    fin.close();
    fout.close();
}

int main()
{
    Citire_t();
    return 0;
}