Pagini recente » Cod sursa (job #2256571) | Istoria paginii runda/swag | Cod sursa (job #2427751) | Cod sursa (job #1680183) | Cod sursa (job #2570233)
#include <fstream>
std :: ifstream fin ("lca.in");
std :: ofstream fout("lca.out");
int n, m;
int* parentArray;
int LCA(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(i, node1, node2);
if (commonAncestor == node1 + node2) {
commonAncestor = node;
break;
}
}
}
return commonAncestor;
}
int main() {
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(1, x, y) << std :: endl;
}
fin.close();
fout.close();
return 0;
}