Cod sursa(job #1288671)

Utilizator AndreiPopescu999Andrei Popescu AndreiPopescu999 Data 8 decembrie 2014 23:11:24
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
int g[250001][20];
const int doi[20] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288 };
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

void marcheaza(int n)
{
    int c = g[n][0],p=0;
    while (g[c][p] != 0)
    {
        g[n][p+1] = g[c][p];
        c = g[c][p];
        p++;
    }
}
void calculeaza(int p, int q)
{
    int t = 18;
    while (doi[t] > p)
    {
        if (t == -1){ break; }
        t--;
    }
    if (doi[t] == p){ fout << g[q][t]<<"\n"; }
    else if (t == -1){ fout << 0 << "\n"; }
    else
    {
        calculeaza(p - doi[t], g[q][t]);
    }
}
int main()
{
   
    int i, n,m,p,q,j,t;
    fin >> n;
    fin >> m;
    for (i = 1; i <= n; i++)
    {
        fin >> g[i][0];
        marcheaza(i); 
    }
    for (i = 1; i <= m; i++)
    {
        fin >> q;
        fin >> p;
        calculeaza(p, q);
    }
 
}