Cod sursa(job #900049)

Utilizator FayedStratulat Alexandru Fayed Data 28 februarie 2013 17:27:16
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#define NMAX 100001
using namespace std;

int father[NMAX];
int n,m;

int root(int nod,int stramos){
        if(nod == stramos)
            return 1;
         else if(father[nod])
                root(father[nod],stramos);
}

int LCA(int a,int b){

    if(a == b)
        printf("%d\n",a);
     else if(root(a,b))
            printf("%d\n",b);
     else if(root(b,a))
             printf("%d\n",a);
      else LCA(father[a],father[b]);
}

void citesc(){

    int x,y;
    freopen("lca.in","r",stdin);
    freopen("lca.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(register int i=2;i<=n;++i)
    scanf("%d",&father[i]);
    for(register int i=1;i<=m;++i){

        scanf("%d%d",&x,&y);
        LCA(x,y);
    }
}

int main(){

    citesc();

return 0;
}