Cod sursa(job #2907016)

Utilizator Theo14Ancuta Theodor Theo14 Data 28 mai 2022 14:25:00
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;

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

int n,m,v[100005],niv[100005];
vector<int>w[100005];

void dfs(int nod, int nivel)
{
    int i;
    niv[nod]=nivel;
    for(auto it:w[nod])
    {
        dfs(it,nivel+1);
    }
}

int main()
{
    int i,x,y;
    cin>>n>>m;
    for(i=2;i<=n;i++)
    {
        cin>>v[i];
        w[v[i]].push_back(i);
    }
    dfs(1,0);
    for(i=1;i<=n;i++)
    {
        cout<<i<<" "<<niv[i]<<'\n';
    }
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        if(niv[x]<niv[y])
        {
            while(niv[x]<niv[y])
            {
                y=v[y];
            }
        }
        else
        {
            while(niv[x]>niv[y])
            {
                x=v[x];
            }
        }
        while(x!=y)
        {
            x=v[x];
            y=v[y];
        }
        cout<<x<<'\n';
    }
    return 0;
}