Cod sursa(job #1000955)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 24 septembrie 2013 07:51:14
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <vector>
using namespace std;

struct rasp {
    int ord,p;
};
vector <rasp> r[300005];
vector <int> v[250005];
unsigned int n,m;
unsigned int stk[250005],stp;
unsigned int result[300005];

void dfs(int n) {
    rasp nw;
    int p,ord;
    stk[stp+1] = n;
    stp++;
    while (!r[n].empty()) {
        nw = r[n].back(); r[n].pop_back();
        p = nw.p; ord = nw.ord;
        if (stp-p>0) result[ord] = stk[stp-p];
        else result[ord] = 0;
    }
    int size = v[n].size();
    for (int i=0;i<size;i++) {
        dfs(v[n][i]);
    }
    stp--;
}

int main() {
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (int i=1;i<=n;i++) {
        int a;
        scanf("%d",&a);
        v[a].push_back(i);
    }
    for (int i=1;i<=m;i++) {
        int p,q;
        scanf("%d %d",&q,&p);
        rasp nw;
        nw.ord=i;
        nw.p = p;
        r[q].push_back(nw);
    }
    dfs(0);
    for (int i=1;i<=m;i++) {
        printf("%d\n",result[i]);
    }
    return 0;
}