Cod sursa(job #1910758)

Utilizator Train1Train1 Train1 Data 7 martie 2017 18:08:49
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
vector <vector <int> > v;
int N1, N2, n, m;
int LCA(int R) {
    int a = -1, b = -1;
    if(R == N1 || R == N2) {
        return R;
    } else {
        for (int i = 0; i < v[R].size(); i++) {
            if (a != -1) {
                b = LCA(v[R][i]);
            } else {
                a = LCA(v[R][i]);
            }
        }
        if (a != -1 && b != -1) {
            return R;
        } else if (a != -1) {
            return a;
        } else if (b != -1) {
            return b;
        }
    }
    return -1;
}
int main()
{
    fin>>n>>m;
    int x, y;
    v.resize(n + 1);
    for (int i = 2; i <= n; i++) {
        fin>>x;
        v[x].push_back(i);
    }
    /*
    for (int i = 1; i <= n; i++) {
        fout<<i<<": ";
        for (int j = 0; j < v[i].size(); j++) {
            fout<<v[i][j]<<' ';
        }
        fout<<'\n';
    }
    */
    for (int j = 1; j <= m; j++) {
        fin>>N1>>N2;
        fout<<LCA(1)<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}