Cod sursa(job #1326129)

Utilizator forever16Alex M forever16 Data 24 ianuarie 2015 18:54:18
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include<fstream>
#define nmax 10005

using namespace std;
    ifstream f("lca.in");
    ofstream g("lca.out");

int n, m, x, y, parent[nmax], level[nmax];

void explore(int x)
{   if(level[x]) return;
    explore(parent[x]);
    level[x]=level[parent[x]]+1;
}

int lca(int x, int y)
{   while(level[x]>level[y]) x=parent[x];
    while(level[y]>level[x]) y=parent[y];

    while(x!=y)
    {   x=parent[x];
        y=parent[y]; }
return x;
}
int main()
{   f>>n>>m;
    for(int i=2; i<=n; i++) f>>parent[i];
    level[1]=1;

    for(int i=1; i<=n; i++) explore(i);

    for(int i=1; i<=m; i++) {
            f>>x>>y;
        g<<lca(x,y)<<"\n"; }
    return 0;
}