Cod sursa(job #2565458)

Utilizator mirceaisherebina mircea mirceaishere Data 2 martie 2020 14:16:01
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, j, t[100010], niv[100010], x, y;
vector <int> a[100010];

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

int main(){
    fin>>n>>m;
    for(i=2; i<=n; i++){
        fin>>x;
        t[i]=x;
        a[x].push_back(i);
    }
    dfs(1);
    for(i=1; i<=m; i++){
        fin>>x>>y;
        while(x!=y){
            if(niv[x]>niv[y]){
                x=t[x];
            }else{
                if(niv[x]<niv[y]){
                    y=t[y];
                }else{
                    while(x!=y){
                        x=t[x];
                        y=t[y];
                    }
                }
            }
        }
        fout<<x<<"\n";
    }
}