Cod sursa(job #1546907)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 8 decembrie 2015 20:32:42
Problema Lowest Common Ancestor Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <stdlib.h>

int v[100001];
int d[100001];

void depth(int nod){
    if(d[nod]==0){
        depth(v[nod]);
        d[nod]=d[v[nod]]+1;
    }
}

int main()
{
    int n, m, i;
    int u, w;
    FILE*fi=fopen("lca.in","r"), *fo=fopen("lca.out","w");
    fscanf(fi,"%d%d", &n, &m);
    for(i=2;i<=n;i++)
        fscanf(fi,"%d", &v[i]);

    d[1]=1;
    for(i=2;i<=n;i++)
        depth(i);

    for(i=0;i<m;i++){
        fscanf(fi,"%d%d", &u, &w);
        while(u!=w){
            while(d[u]<d[w])
                w=v[w];
            while(d[w]<d[u])
                u=v[u];
            if(u!=w)
                u=v[u];
        }
        fprintf(fo,"%d\n", u);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}