Pagini recente » Cod sursa (job #1396802) | Cod sursa (job #2714992) | Cod sursa (job #1784353) | Cod sursa (job #586220) | Cod sursa (job #2693286)
#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;
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;
for(i=1;i<=m;i++) {
fin>>a>>b;
if(a==t[b]) {
fout<<a<<"\n";
}
else if(b==t[a]) {
fout<<b<<"\n";
}
else {
int ok=0;
while(ok==0) {
a=t[a];
cont[a]++;
if(a==root) {
ok=1;
}
}
ok=0;
int findd=0;
while(ok==0) {
b=t[b];
if(cont[b]!=0) {
findd=b;
ok=1;
}
if(b==root) {
ok=1;
}
}
fout<<findd<<"\n";
}
for(j=1;j<=n;j++) {
cont[j]=0;
}
}
return 0;
}