Cod sursa(job #1832924)

Utilizator delia_ioanaCeapa Delia Ioana delia_ioana Data 21 decembrie 2016 10:53:56
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
#include <stdio.h>
#include <utility>
#include <stdlib.h>
#include <dirent.h>

using namespace std;

int size, operations, a;

int main() {
    freopen("lca.in", "r", stdin);
    freopen("lca.out", "w", stdout);
    
    scanf("%d %d", &size, &operations);
    
    vector<int> parents(size + 1);
    vector<int> levels(size + 1);

    for (int i = 2; i <= size; i ++) {
        scanf("%d", &a);
        parents[i] = a;
    }

    for (int i = 2; i <= size; i ++)
        levels[i] = levels[parents[i]] + 1;

    for (int i = 0; i < operations; i ++) {
        int u, v;
        scanf("%d %d", &u, &v);

        while (u != v) {
            if (levels[u] > levels[v])
                u = parents[u];
            else v = parents[v];
        }

        printf("%d\n", u);
    }

    return 0;
}