Cod sursa(job #1139503)

Utilizator manutrutaEmanuel Truta manutruta Data 11 martie 2014 11:05:52
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

#define MAXN 250005
#define MAXL 20

ifstream f("stramosi.in");
ofstream g("stramosi.out");

int n, m;
int tata[MAXN];
int dp[MAXL][MAXN];

int dfs(int nd, int p)
{
    for (int i = MAXL; i >= 0; i--) {
        if (p & (1 << i)) {
            nd = dp[i][nd];
        }
    }
    return nd;
}

int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; i++) {
        f >> dp[0][i];
    }

    for (int k = 1; k <= MAXL; k++) {
        for (int i = 1; i <= n; i++) {
            dp[k][i] = dp[k - 1][dp[k - 1][i]];
        }
    }

    for (int i = 1; i <= m; i++) {
        int x, y;
        f >> x >> y;
        g << dfs(x, y) << '\n';
    }

    f.close();
    g.close();
    return 0;
}