Cod sursa(job #2217657)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 1 iulie 2018 12:52:41
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 100001

FILE *f, *g;

int TT[MAXN], VIZ[MAXN];
int n, m, i;

void citire()
{
        fscanf (f, "%d %d", &n, &m);

        TT[1] = 1;
        for (i = 2; i <= n; ++i)
                fscanf (f, "%d", &TT[i]);

}

void solve(int x, int y)
{
        int j;

        for (j = 1; j <= n; ++j)
                VIZ[j] = 0;

        if (TT[x] == y)
        {
                fprintf (g, "%d\n", TT[x]);
                return;
        }
        else if (TT[y] == x)
        {
                fprintf (g, "%d\n", TT[y]);
                return;
        }

        while (x != 1)
        {
                VIZ[TT[x]] = 1;
                x = TT[x];
        }

        while (1)
        {
                if (VIZ[TT[y]] == 1)
                {
                        fprintf (g, "%d\n", TT[y]);
                        break;
                }
                else
                {
                        y = TT[y];
                }
        }
}

int main()
{
        f = fopen ("lca.in", "r");
        g = fopen ("lca.out", "w");
        citire ();

        for (i = 0; i < m; ++i)
        {
                int x, y;
                fscanf (f, "%d %d", &x, &y);

                solve (x, y);

        }

        fclose (f);

        return 0;
}