Cod sursa(job #916948)

Utilizator alexandru93moraru alexandru sebastian alexandru93 Data 17 martie 2013 01:05:12
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
#include<vector>
using namespace std;

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

int N,M;
struct nod{
    int h,t;
};

vector<nod> V;

int lca(int x,int y){
    while(1<2)
        if(V[x].h==V[y].h)
            if(V[x].t==V[y].t)
                return V[x].t;
            else
                x=V[x].t,y=V[y].t;
        else{
            if(V[x].t==y) return y;
            if(V[y].t==x) return x;
            if(V[x].h<V[y].h){V[y].h--;continue;}
            if(V[y].h<V[x].h){V[x].h--;continue;}
            }
}

int main(){
    int t,x,y;
    f>>N>>M;
    V.resize(N+1);
    for(int i=2;i<=N;i++){
        f>>t;
        V[i].t=t;
        V[i].h=V[t].h+1;
    }
    for(int i=0;i<M;i++){
        f>>x>>y;
        g<<lca(x,y)<<'\n';
    }
    return 0;
}