Cod sursa(job #3366243)

Utilizator Mihai09Mihai Arteni Mihai09 Data 30 septembrie 2026 09:49:00
Problema Lowest Common Ancestor Scor 0
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,up[100010][20],dfss[100010],dfse[100010],cnt;
list<int>ofs[100010];

void dfs(int x)
{
    cnt++;
    dfss[x] = cnt;
    for(int son:ofs[x])
    {
        dfs(son);
    }
    cnt++;
    dfse[x] = cnt;
}

bool isa(int a,int b)
{
    return (dfss[a] <= dfss[b] && dfse[b] <= dfse[a]);
}

int main()
{
    fin >>n >>m;
    for(int i = 1;i <= n-1;i++)
    {
        int x;
        fin >>x;
        up[i+1][0] = x;
        ofs[x].push_back(i+1);
    }
    up[1][0] = 1;
    dfs(1);
    for(int i = 1;i <= 18;i++)
    {
        for(int x = 1;x <= n;x++)
        {
            up[x][i] = up[up[x][i-1]][i-1];
        }
    }
    fout <<isa(2,8);
    return 0;
}