Cod sursa(job #3131818)

Utilizator hhhhhhhAndrei Boaca hhhhhhh Data 21 mai 2023 17:49:05
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int n,m;
int tata[100005];
vector<int> muchii[100005];
int in[100005],out[100005],timp;
bool esteparinte(int u,int v)
{
    return in[u]<=in[v]&&out[u]>=out[v];
}
void dfs(int nod)
{
    timp++;
    in[nod]=timp;
    for(int i:muchii[nod])
        if(i!=tata[nod])
            dfs(i);
    out[nod]=timp;
}
int main()
{
    fin>>n>>m;
    for(int i=2;i<=n;i++)
    {
        fin>>tata[i];
        muchii[i].push_back(tata[i]);
        muchii[tata[i]].push_back(i);
    }
    dfs(1);
    while(m--)
    {
        int u,v;
        fin>>u>>v;
        int lca=u;
        while(!esteparinte(lca,v))
            lca=tata[lca];
        fout<<lca<<'\n';
    }
    return 0;
}