Cod sursa(job #1435140)
| Utilizator | Data | 12 mai 2015 11:39:17 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.71 kb |
#include <fstream>
using namespace std;
ifstream in("lca.in");
ofstream out("lca.out");
const int NMAX=100010;
int n,i,x,a,b;
int niv[NMAX],tata[NMAX];
long long teste;
int main()
{
in>>n>>teste;
niv[1]=0;
tata[1]=1;
for(i=2;i<=n;i++)
{
in>>tata[i];
niv[i]=niv[tata[i]]+1;
}
for(i=1;i<=teste;i++)
{
in>>a>>b;
while(niv[a]<niv[b])
{
b=tata[b];
}
while(niv[b]<niv[a])
{
a=tata[a];
}
while(a!=b)
{
a=tata[a];
b=tata[b];
}
out<<a<<'\n';
}
in.close();
out.close();
return 0;
}
