Cod sursa(job #2897107)

Utilizator StefanSVStefan S V StefanSV Data 2 mai 2022 15:30:49
Problema Lowest Common Ancestor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 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;
	
}