Cod sursa(job #2236027)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 27 august 2018 19:04:47
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream f("lca.in");
ofstream g("lca.out");

vector<int> vec[100010];
int i,j,n,m,k,x,y,gasit;
int fr[100010],fr2[100010],t[100010];
void dfs1(int x)
{
    fr[x]=1;
    if(x==1)
        return;
    dfs1(t[x]);
}
int dfs2(int x)
{
    fr2[x]=1;
    if(fr[x]==1)
        return x;
    dfs2(t[x]);
}
int main()
{
    f>>n>>k;
    for(i=2;i<=n;i++)
    {
        f>>x;
        t[i]=x;
        vec[x].push_back(i);
        vec[i].push_back(x);
    }
    for(i=1;i<=k;i++)
    {
        f>>x>>y;
        for(j=1;j<=n;j++)
            fr[j]=fr2[j]=0;
        dfs1(x);
        g<<dfs2(y)<<'\n';
    }
}