Cod sursa(job #1734774)

Utilizator tudorgalatanRoman Tudor tudorgalatan Data 28 iulie 2016 11:16:20
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define MAX 100001

using namespace std;

void DFS (int node, int level);

unsigned int n, m;
unsigned int father[MAX];
unsigned int u, v;

unsigned int lev[MAX];
unsigned int i;

int main ()
{
    ifstream fin ("lca.in");
    fin >> n >> m;
    for(i=2; i<=n; i++)
        fin >> father[i];
    DFS (1,0);
    ofstream fout ("lca.out");
    for (i=1; i<=m; i++)
    {
        fin >> u >> v;
        while (u != v)
            if (lev[u] > lev[v])
                u = father[u];
            else
                v = father[v];
        fout << u << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}

void DFS (int node, int level)
{
    unsigned int i;
    lev[node] = level;
    for (i=1; i<=n; i++)
        if (father[i] == node)
            DFS(i,level+1);
}