Cod sursa(job #3227908)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 3 mai 2024 18:27:56
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#define dim 100001
#include <vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");

int tata[dim], nivel[dim];
vector <int> l[dim];

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

int main()
{
    int n, m, i, x, y;
    fin>>n>>m;
    tata[1]=0;
    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(nivel[x]>nivel[y])
        {
            x=tata[x];
        }
        while(nivel[y]>nivel[x])
        {
            y=tata[y];
        }
        while(x!=y)
        {
            x=tata[x];
            y=tata[y];
        }
        fout<<x<<"\n";
    }
}