Cod sursa(job #1734871)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 28 iulie 2016 14:10:32
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
const int h=200;
int tata[100005],tata2[100005];
int niv[100005],x,y,m,n,i;
vector<int>ls[100005];
void dfs(int nod,int n1,int Niv)
{
    int i;
    tata2[nod]=n1;
    niv[nod]=Niv;
    if(Niv%h==0)
      n1=nod;
    for(i=0;i<ls[nod].size();i++)
      dfs(ls[nod][i],n1,Niv+1);
}
int main()
{
    f>>n>>m;
    for(i=2;i<=n;i++)
    {
        f>>tata[i];
        ls[tata[i]].push_back(i);
    }
    df(1,1,0);
    while(m)
    {
        f>>x>>y;
        while(tata2[x]!=tata2[y])
          if(niv[x]>niv[y])
            x=tata2[x];
          else
            y=tata2[y];
        while(x!=y)
          if(niv[x]>niv[y])
            x=tata[x];
          else
            y=tata[y];
        g<<x<<"\n";
        m--;
    }
    return 0;
}