Cod sursa(job #2324358)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 20 ianuarie 2019 16:52:39
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std ;
const int NMAX = 100001 ;
ifstream f ("lca.in") ;
ofstream g ("lca.out") ;

vector < int > v [ NMAX ] ;


    void dfs ( int nod , int father , int level [ NMAX ] )
    {
        level [ nod ] = level [ father ] + 1 ;
        for ( size_t i = 0 ; i < v[ nod ].size() ; ++ i )
        {
            dfs ( v [ nod ][ i ] , nod , level ) ;
        }
    }

     int lca_brutforce ( int x , int y , int Father [ NMAX] , int level [ NMAX ] )
     {
        while ( x != y )
        {
        if ( level [ x ] > level [ y ] )
            x = Father [ x ] ;
        else
            y = Father [ y ] ;
        }
        return x ;
     }
    int rmq_brutforce ( int x , int y , int v [ NMAX ] )
    {
        int i , minim ;
        minim = v [ x ] ;
        for ( i = x + 1 ; i <= y ; ++ i )
        if ( v [ i ] < minim )  minim = v [ i ] ;
        return minim ;
    }


int main ()
{
    int i ;
    int n , q , cnt ,  level [ NMAX ] = {0} , Father [ NMAX ] = {0} ;
    f >> n >> q ;
    for ( int i = 2 ; i <= n ; ++ i )
    {
        f >> Father [ i ] ;
        v [ Father [ i ] ].push_back( i ) ;
    }
    dfs ( 1 , 0 , level ) ;
    while ( q -- )
    {
        int x , y ;
        f >> x >> y ;
        g << lca_brutforce( x , y , Father , level ) << "\n" ;
    }
    return 0 ;
}