Pagini recente » Monitorul de evaluare | Profil Vlad3108 | Cod sursa (job #1123792) | Cod sursa (job #2361336) | Cod sursa (job #2954579)
#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;
}