Cod sursa(job #1813803)

Utilizator crazylamaRiclea Andrei crazylama Data 23 noiembrie 2016 12:34:58
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector<int> Father;
vector<bool> MarkedNodes;

void ReinitializeNodes(int n)
{
    for (int i = 1; i <= n; ++i)
        MarkedNodes[i] = false;
}

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

int FindLCA(int currentNode)
{
    while (!MarkedNodes[currentNode])
        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 = 0; i < m; ++i)
    {
        int x, y;
        f >> x >> y;
        ReinitializeNodes(n);
        MarkNodes(x);
        g << FindLCA(y) << "\n";
    }
    return 0;
}