Cod sursa(job #2374538)

Utilizator maria15Maria Dinca maria15 Data 7 martie 2019 19:12:09
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 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];
char s[20];

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--){
        a = b = 0;
        fin.get();
        fin>>s;
        for(i=0;s[i]!=0;i++)
            a = a*10 + s[i] - '0';
        fin>>s;
        for(i=0;s[i]!=0;i++)
            b = b*10 + s[i] - '0';
        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;
}