Cod sursa(job #1851231)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 19 ianuarie 2017 15:37:42
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int n,m,i,x,tt[100010],y,lev[100001];
vector<int>v[100001];
void dfs(int nod,int niv)
{
    lev[nod]=niv;
    for(int k=0;k<v[nod].size();k++)
        dfs(v[nod][k],niv+1);
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n-1;i++)
    {
        f>>x;
        tt[i+1]=x;
        v[x].push_back(i+1);
    }
    dfs(1,1);
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        while(x!=y)
        {
            if(lev[x]>lev[y])
                x=tt[x];
            else
                y=tt[y];
        }
        g<<x<<'\n';
    }
}