Cod sursa(job #2889227)

Utilizator StefanSVStefan S V StefanSV Data 12 aprilie 2022 14:35:55
Problema Lowest Common Ancestor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <queue>

using namespace std;

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

int n,t[100001],niv[100001];
bool ver[101];

int main()
{
    int m;
    in>>n>>m;
    for(int i=2 ; i<=n ; i++)
        in>>t[i];
    {
        //bfs
        queue <int> q;
        q.push(1);
        while(!q.empty())
        {
            int nod=q.front();
            q.pop();
            for(int i=1 ; i<=n ; i++)
                if(t[i]==nod)
                {
                    niv[i]=niv[nod]+1;
                    q.push(i);
                }
        }
    }
    while(m)
    {
        int a,b;
        in>>a>>b;
        while(a!=b)
        {
            if(niv[a]<niv[b])
                b=t[b];
            else a=t[a];
        }
        out<<a<<"\n";
        m--;
    }
    return 0;
}