Pagini recente » Cod sursa (job #2770301) | Cod sursa (job #2535457) | Cod sursa (job #854011) | Cod sursa (job #1304126) | Cod sursa (job #2570194)
#include <fstream>
std :: ifstream fin ("lca.in");
std :: ofstream fout("lca.out");
int n, m;
int LCA(int parentArray[], int node, int node1, int node2) {
int commonAncestor = 0;
if (node == node1)
return node1;
if (node == node2)
return node2;
for (int i = 2;i <= n;i ++) {
if (parentArray[i] == node) {
commonAncestor += LCA(parentArray, i, node1, node2);
if (commonAncestor == node1 + node2) {
commonAncestor = node;
break;
}
}
}
return commonAncestor;
}
int main() {
int* parentArray;
fin >> n >> m;
parentArray = new int[n + 1];
parentArray[1] = -1;
for (int i = 2;i <= n;i ++) {
fin >> parentArray[i];
}
int x, y;
for (int i = 1;i <= m;i ++) {
fin >> x >> y;
fout << LCA(parentArray, 1, x, y) << std :: endl;
}
fin.close();
fout.close();
return 0;
}