Cod sursa(job #3297369)

Utilizator antonia225Stoica Elena-Antonia antonia225 Data 22 mai 2025 15:38:37
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
using namespace std;

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

int main()
{
    int n, m;
    fin >> n >> m;

    vector<int> parent(n + 1);                                  // parinti[i] = parintele lui i
    vector<vector<int>> ancestor(n + 1, vector<int>(20, 0));    // stramosi[i][j] = 2^j stramosul lui i

    // citim parintii
    for (int i = 1; i <= n; i++)
    {
        fin >> parent[i];
        ancestor[i][0] = parent[i];
    }

    // construim matricea stramosi
    for (int j = 1; j < 20; j++)
        for (int i = 1; i <= n; i++)
            ancestor[i][j] = ancestor[ancestor[i][j - 1]][j - 1];

    // citim interogari si afisam rezultatele
    for (int i = 0; i < m; i++)
    {
        int person, k;
        fin >> person >> k;
        int j = 0;
        while (k)
        {
            if (k & 1)
                person = ancestor[person][j];
            k >>= 1;
            j++;
        }
        fout << person << '\n';
    }
    fin.close();
    fout.close();

    return 0;
}