Cod sursa(job #1813813)

Utilizator crazylamaRiclea Andrei crazylama Data 23 noiembrie 2016 12:44:16
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("lca.in");
ofstream g("lca.out");

vector<int> Father, MarkedNodes;

void MarkNodes(int currentNode, int val)
{
    do
    {
        MarkedNodes[currentNode] = val;
        currentNode = Father[currentNode];
    } while (currentNode);
}

int FindLCA(int currentNode, int val)
{
    while (MarkedNodes[currentNode] != val)
        currentNode = Father[currentNode];
    return currentNode;
}

int main()
{
    int n, m;
    f >> n >> m;
    Father.resize(n + 1);
    MarkedNodes.resize(n + 1);
    for (int i = 1; i < n; ++i)
        f >> Father[i + 1];
    for (int i = 1; i <= m; ++i)
    {
        int x, y;
        f >> x >> y;
        MarkNodes(x, i);
        g << FindLCA(y, i) << "\n";
    }
    return 0;
}