Cod sursa(job #730827)

Utilizator mariulaurMariu Laurentiu mariulaur Data 6 aprilie 2012 22:36:48
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
#include<vector>
#include<bitset>

using namespace std;

int i,j,n,m,rez[300009],p,q,stiva[250009],nr;

struct nod
{
  int  p,poz;
};
vector<nod>in[250009];
vector<int> a[250009];
bitset<300000> fol;

void dfs(int i)
{
    fol[i]=1;
    stiva[++nr]=i;
    for(int j=0;j<in[i].size();++j)
        if(nr-in[i][j].p>0) rez[in[i][j].poz]=stiva[nr-in[i][j].p];
        else rez[in[i][j].poz]=0;

    for(int j=0;j<a[i].size();++j)
     if(!fol[a[i][j]]) dfs(a[i][j]);
     --nr;

}

int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(i=1;i<=n;++i)
    {
        int x;
        scanf("%d",&x);
        a[x].push_back(i);
    }

    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&q,&p);
        nod aux;
        aux.p=p;
        aux.poz=i;
        in[q].push_back(aux);
    }

    for(i=0;i<=n;++i)
    if(!fol[i]) dfs(i);

    for(i=1;i<=m;++i) printf("%d\n",rez[i]);

    fclose(stdin);
    fclose(stdout);

    return 0;
}