Cod sursa(job #2278085)

Utilizator danielsociuSociu Daniel danielsociu Data 7 noiembrie 2018 11:37:51
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.58 kb
#include <fstream>
std::ifstream cin("lca.in");
std::ofstream cout("lca.out");
#define maxn 100005
using namespace std;
int n,m, t[maxn],lev[maxn];

int dfs(int nod, int lv){
    lev[nod]=lv;
    for(int i=1;i<=n;i++)
        if(t[i]==nod)
            dfs(i,lv+1);
}

int main()
{
    int x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>t[i];
    dfs(1,0);
    for(;m--;){
        cin>>x>>y;
        while(x!=y){
            if(lev[x]>lev[y])
                x=t[x];
            else
                y=t[y];
        }
        cout<<x<<'\n';
    }
}