Cod sursa(job #2183322)

Utilizator infomaxInfomax infomax Data 23 martie 2018 00:28:51
Problema Lowest Common Ancestor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

ifstream F("lca.in");
ofstream G("lca.out");

int n, m, d[20][100005], x, y, maxx;

int main()
{
    F >> n >> m;
    d[0][1]=1;
    for(int i = 2; i <= n; ++ i){
        F >> d[0][i];
    }
    for(int i = 1; i <= 17; ++ i)
        for(int j = 1; j <= n; ++ j)
            d[i][j]=d[i-1][d[i-1][j]];
    while(m--){
        F >> x >> y;
        maxx=-1;
        for(int i = 0; i <= 17; ++ i)
            for(int j = 0; j <= 17; ++ j)
                if(d[i][x] == d[j][y]) maxx=max(maxx, d[i][x]);
        for(int i = 0; i <= 17; ++ i)
            if(d[i][x] == y) maxx=max(maxx, d[i][x]);
        for(int i = 0; i <= 17; ++ i)
            if(d[i][y] == x) maxx=max(maxx, d[i][y]);
        if(y==x) maxx=max(maxx, x);
        G<<maxx<<'\n';
    }
    return 0;
}