Pagini recente » Cod sursa (job #453798) | Cod sursa (job #501751) | Cod sursa (job #1680322) | Cod sursa (job #568536) | Cod sursa (job #1649525)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int arbt[100001], niv[100001], n;
int lca(int a, int b) {
int c, nivc;
while (niv[a] != niv[b]) {
if (niv[a]>niv[b])
a = arbt[a];
else
b = arbt[b];
}
while (arbt[a] != arbt[b]) {
a = arbt[a];
b = arbt[b];
}
c = arbt[a];
return c;
}
int main()
{
int i, x, y, m, j, rad;
f>>n>>m;
for (i=1;i<=n;i++) {
f>>arbt[i];
if (arbt[i]==0)
rad = i;
}
niv[rad]=1;
int dist;
for (i=1;i<=m;i++) {
f>>x>>y;
g<<lca(x,y)<<"\n";
}
return 0;
}