Cod sursa(job #801564)

Utilizator cameleonGeorgescu Dan cameleon Data 24 octombrie 2012 18:16:12
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include<vector>
#include<stack>
#define Nmax 250005
#define Mmax 300005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");

int n,m;
vector<int> a[Nmax];
vector <pair<int,int> >b[Nmax];
int s[Nmax],r[Mmax];

void cit()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        a[x].push_back(i);
    }
    for(int i=1;i<=m;i++)
    {
        int q,p;
        f>>q>>p;
        b[q].push_back(make_pair(p,i));
    }
}

void solve(int x,int niv)
{
    vector<pair<int,int> >::iterator i;
    for(i=b[x].begin();i!=b[x].end();i++)
    {
        pair<int,int> y= *i;
        if(niv-y.first>=0)
            r[y.second]=s[niv-y.first];
        else
            r[y.second]=0;

    }
}

void dfs(int x,int niv)
{
   s[niv]=x;
   solve(x,niv);
   vector<int>::iterator i;
   for(i=a[x].begin();i!=a[x].end();i++)
    dfs(*i,niv+1);
}

void afis()
{
    for(int i=1;i<=m;i++)
        g<<r[i]<<'\n';
}

int main()
{
    cit();
    vector<int>::iterator i;
    for(i=a[0].begin();i!=a[0].end();i++)
        dfs(*i,0);
    afis();
    return 0;
}