Cod sursa(job #1518607)

Utilizator mariusn01Marius Nicoli mariusn01 Data 6 noiembrie 2015 00:04:37
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
// pentru fiecare nod i se tin toti stramosii sai aflati
// la distanta putere de 2
#include <fstream>
#define DIMN 250010
using namespace std;

int n, q, i, j, node, ancestor;
int D[19][DIMN];

int main () {
    ifstream fin ("stramosi.in");
    ofstream fout("stramosi.out");

    fin>>n>>q;
    for (i=1;i<=n;i++) {
        fin>>D[0][i];
    }

    for (i=1; i <= 18; i++)
        for (j=1;j<=n;j++)
            D[i][j] = D[i-1][  D[i-1][j]  ];
    for (i=1;i<=q;i++) {
        fin>>node>>ancestor;
        int p = 0;
        while (ancestor) {
            if (ancestor % 2 == 1) {
                node = D[p][node];
            }
            p++;
            ancestor /= 2;
        }
        fout<<node<<"\n";
    }

    return 0;
}