Cod sursa(job #2656263)

Utilizator cezarzbughinCezar Zbughin cezarzbughin Data 7 octombrie 2020 12:08:48
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

ifstream f("lca.in");
ofstream g("lca.out");
void dfs(int);
const int N=100005;
vector<int> kids[N];
vector<int> p(1,0);
int T[N],p_end[N];


int main()
{
    int n,m;
    f>>n>>m;
    T[1]=1;
    for(int i=2;i<=n;i++)
    {
        int x;
        f>>x;
        T[i]=x;
        kids[x].push_back(i);
    }
    dfs(1);
   /// for(auto it:p)cout<<it<<' ';

    for(;m;m--)
    {
        int x,y;
        f>>x>>y;
        while(p_end[x]<p_end[y])
        {
            x=T[x];
        }
        g<<x<<endl;
    }
    return 0;
}

void dfs(int node)
{
    p.push_back(-node);
    for(auto it:kids[node])dfs(it);
    p.push_back(node);
    p_end[node]=p.size()-1;
}