Pagini recente » Cod sursa (job #308137) | Cod sursa (job #1936687) | Cod sursa (job #1890693) | Cod sursa (job #2095786) | Cod sursa (job #1518481)
#include <fstream>
#include <vector>
#define NMax 100010
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int nodes, queries, father[NMax], disTree[NMax], level[NMax], lev = -1;
vector<int> tree[NMax];
void DFS(int node)
{
level[node] = ++lev;
for (vector<int>::iterator it = tree[node].begin(); it != tree[node].end(); it++)
DFS(*it);
lev--;
}
int main()
{
f>>nodes>>queries;
for (int i=2; i<=nodes; i++) {
f>>father[i];
tree[father[i]].push_back(i);
}
DFS(1);
int x, y;
for (int i=1; i<=queries; i++) {
f>>x>>y;
while (level[x] > level[y])
x = father[x];
while (level[y] > level[x])
y = father[y];
while (x != y) {
x = father[x];
y = father[y];
}
g << x << "\n";
}
return 0;
}