Cod sursa(job #3120705)

Utilizator ana_valeriaAna Valeria Duguleanu ana_valeria Data 8 aprilie 2023 11:15:32
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("lca.in");
ofstream cout ("lca.out");
int viz[100010],tata[100010],niv[100010];
vector <int> lista[100010];
void dfs(int nod,int nivel)
{
    int i;
    viz[nod]=1;
    niv[nod]=nivel;
    for (i=0; i<lista[nod].size(); i++)
        if (viz[lista[nod][i]]==0)
            dfs(lista[nod][i],nivel+1);
}
int main()
{
    int n,q,i,x,y;
    cin>>n>>q;
    for (i=2; i<=n; i++)
    {
        cin>>tata[i];
        lista[i].push_back(tata[i]);
        lista[tata[i]].push_back(i);
    }
    dfs(1,0);
    for (i=1; i<=q; i++)
    {
        cin>>x>>y;
        if (niv[x]<niv[y])
            swap(x,y);
        while (niv[x]!=niv[y])
            x=tata[x];
        while (x!=y)
        {
            x=tata[x];
            y=tata[y];
        }
        cout<<x<<"\n";
    }
    return 0;
}