Pagini recente » Cod sursa (job #1617942) | Cod sursa (job #958132) | Cod sursa (job #2217165) | Cod sursa (job #559285) | Cod sursa (job #2324354)
#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 query ( 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 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 << query ( x , y , Father , level ) << "\n" ;
}
return 0 ;
}