Cod sursa(job #2374516)

Utilizator maria15Maria Dinca maria15 Data 7 martie 2019 19:07:55
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("lca.in");
ofstream fout("lca.out");

int n, m, i, t[100001], a, b, niv[100001];
vector<int> v[100001];

void dfs(int nod, int nivel){
    niv[nod] = nivel;
    for(int i = 0;i<v[nod].size();i++)
        dfs(v[nod][i], nivel+1);
}

int main(){
    fin>>n>>m;
    for(i=2;i<=n;i++){
        fin>>t[i];
        v[t[i]].push_back(i);
    }
    dfs(1, 1);
    while(m--){
        fin>>a>>b;
        while(niv[a] > niv[b])
            a = t[a];
        while(niv[b] > niv[a])
            b = t[b];
        while(a != b){
            a = t[a];
            b = t[b];
        }
        fout<<a<<"\n";
    }
    return 0;
}