Cod sursa(job #1049860)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 7 decembrie 2013 21:22:49
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> fii[400002];
vector <pair <int,int> > res[400002];
vector <int> stiva;
int n,nq,i,j,nr,q,p,s,r[400002];
void go(int nod)
{

    for (int i=0;i<res[nod].size();i++)
        if (res[nod][i].first>stiva.size())
            res[nod][i].first=0;
        else
            res[nod][i].first=stiva[stiva.size()-res[nod][i].first];

    stiva.push_back(nod);

    for (int i=0;i<fii[nod].size();i++)
        go(fii[nod][i]);

    stiva.pop_back();
}
int main(void)
{
    FILE * f;
    f=fopen("stramosi.in","r");
    ofstream g("stramosi.out");

    fscanf(f,"%d%d",&n,&nq);

    for (i=1;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        fii[nr].push_back(i);
    }

    for (i=1;i<=nq;i++)
    {
        fscanf(f,"%d%d",&q,&p);
        res[q].push_back(make_pair(p,i));
    }

    for (i=0;i<fii[0].size();i++)
        go(fii[0][i]);

    for (i=1;i<=n;i++)
    {
        s=res[i].size();
        for (j=0;j<res[i].size();j++)
            r[res[i][j].second]=res[i][j].first;
    }
    for (i=1;i<=nq;i++)
        g<<r[i]<<'\n';

    return 0;
}