Cod sursa(job #2907017)

Utilizator Theo14Ancuta Theodor Theo14 Data 28 mai 2022 14:27:33
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 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;
    f>>n>>m;
    for(i=2;i<=n;i++)
    {
        f>>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++)
    {
        f>>x>>y;
        if(niv[x]<niv[y])
        {
            swap(x,y);
        }
        while(niv[x]>niv[y])
        {
            x=v[x];
        }
        while(x!=y)
        {
            x=v[x];
            y=v[y];
        }
        g<<x<<'\n';
    }
    return 0;
}