Pagini recente » Cod sursa (job #751803) | Cod sursa (job #1779036) | Cod sursa (job #995101) | Cod sursa (job #621934) | Cod sursa (job #2693300)
#include <iostream>
#include<fstream>
using namespace std;
int t[100001], c[100001], cont[100001];
int main() {
int n, m, i, j, root, x, p, a, b, ok;
ifstream fin("lca.in");
ofstream fout("lca.out");
fin>>n>>m;
for(i=1;i<=n-1;i++) {
fin>>x;
t[i+1]=x;
}
root=1;
t[1]=1;
for(i=1;i<=m;i++) {
fin>>a>>b;
if(a==t[b]) {
fout<<a<<"\n";
}
else if(b==t[a] || a==b) {
fout<<b<<"\n";
}
else if(a==1 || b==1) {
fout<<"1\n";
}
else {
ok=1;
while(ok==1) {
a=t[a];
cont[a]++;
if(a==root) {
ok=0;
}
}
ok=1;
int findd=0;
if(cont[b]==1) {
fout<<b<<"\n";
}
else {
while(ok==1){
b=t[b];
if(cont[b]!=0) {
findd=b;
ok=0;
}
if(b==root) {
ok=0;
}
}
fout<<findd<<"\n";
}
}
for(j=1;j<=n;j++) {
cont[j]=0;
}
}
return 0;
}