Cod sursa(job #1850622)

Utilizator silkMarin Dragos silk Data 18 ianuarie 2017 19:57:06
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMax 300000
#define x first
#define y second
using namespace std;

typedef pair<int, int> abc;
vector<int> a[NMax+1];
vector<abc> q[NMax+1];
int stiva[NMax+1];
int res[NMax+1];
int v[NMax+1];
int nr;

void DFS(int k)
{
    abc r;

    for(int i = 0; i < q[k].size(); ++i)
    {
        r = q[k][i];
        if(nr < r.x) res[r.y] = 0;
        else res[r.y] = stiva[nr-r.x+1];
    }

    stiva[++nr] = k;
    for(int i = 0; i < a[k].size(); ++i) DFS(a[k][i]);
    --nr;
}

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

    int i,N,M,x,y;

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

    for(i = 1; i <= M; ++i)
    {
        scanf("%d %d",&x,&y);
        q[x].push_back({y,i});
    }

    for(i = 1; i <= N; ++i)
    if( !v[i] ) DFS(i);

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


return 0;
}