Cod sursa(job #1305572)

Utilizator somuBanil Ardej somu Data 29 decembrie 2014 21:48:46
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#define nmax 250005
using namespace std;

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

int n, m, q, p;
string s;
int T[nmax], LEVEL[nmax];

void readData() {
    int i, x = 0, k = 0;
    fin >> n >> m;
    fin.get();
    getline(fin, s);
    s[s.size()] = ' ';
    LEVEL[0] = 0;
    for (i = 0; i <= s.size(); i++)
        if (isspace(s[i])) {
            k++;
            T[k] = x;
            LEVEL[k] = LEVEL[x] + 1;
            x = 0;
        } else
            x = x * 10 + int(s[i]) - 48;
}

int root(int nod, int s, int d) {
    if (s == d)
        return nod;
    d++;
    return root(T[nod], s, d);
}

void solve() {
    int i, lp;
    for (i = 1; i <= m; i++) {
        fin >> q >> p;
        lp = LEVEL[q] - p;
        if (lp <= 0) {
            fout << 0 << "\n";
            continue;
        }
        fout << root(q, p, 0) << "\n";
    }
}

int main() {
    readData();
    solve();
    fin.close();
    fout.close();
    return 0;
}