Cod sursa(job #2973909)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 2 februarie 2023 19:44:07
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
vector <int> l[100001];

int tata[100001], niv[100001];

void dfs(int nod, int nivel)
{
    niv[nod]=nivel;
    for(int i=0;i<l[nod].size();i++)
    {
        int vecin=l[nod][i];
        if(vecin!=tata[nod])
        {
            dfs(vecin, nivel+1);
        }
    }
}

int main()
{
    int n, m, i, x, y;
    fin>>n>>m;
    for(i=2;i<=n;i++)
    {
        fin>>tata[i];
        l[tata[i]].push_back(i);
        l[i].push_back(tata[i]);
    }
    dfs(1, 0);
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        while(niv[x]>niv[y])
        {
            x=tata[x];
        }
        while(niv[y]>niv[x])
        {
            y=tata[y];
        }
        while(x!=y)
        {
            x=tata[x];
            y=tata[y];
        }
        fout<<x<<"\n";
    }
    return 0;
}