Cod sursa(job #953129)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 24 mai 2013 23:05:25
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,i,j,q,nr,t,x,y,tata[100007],viz[100007];
bool ok;
char s[1000007],c[6];

void citire()
{
    freopen("lca.in","r",stdin);
    freopen("lca.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    gets(s);
    for(i=1;i<n;i++){
        while(s[j]!=' ' && s[j])nr=nr*10+s[j]-'0',j++;
        tata[i+1]=nr;
        j++;
        nr=0;
    }
}

int main()
{
    citire();


    for(i=1;i<=m;i++){
        scanf("%d %d",&x,&y);
        if(x!=y)ok=true;
        viz[x]=i;
        viz[y]=i;
        while(ok==true){
            if(x!=0){
            x=tata[x];
            if(viz[x]==i)ok=false;
            viz[x]=i;
            }
            if(y!=0){
            y=tata[y];
            if(viz[y]==i && ok==true)ok=false,x=y;
            viz[y]=i;
            }
        }
        printf("%d\n",x);
    }
    return 0;
}