Cod sursa(job #1000884)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 23 septembrie 2013 21:34:58
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,dist[250010],S[250010];
int sol[300010];

vector<int> L[250110],C,st;

struct querry{
    int nod;
    vector<int> q;
    vector<int> o;
};
querry v[250110];

void dfs(int nod){
    //raspundem la intrebarile pt nod
    S[++S[0]]=nod;
    for(register int i=0;i<v[nod].q.size();i++){
        if(S[0]<=v[nod].q[i])
            sol[v[nod].o[i]]=0;
        else
            sol[v[nod].o[i]]=S[S[0]-v[nod].q[i]];
    }
    for(register int i=0;i<L[nod].size();i++){
        dfs(L[nod][i]);
    }
    S[0]--;
}

int main(void){
    int i,j,x,p,q;

    f>>n>>m;
    C.push_back(0);
    for(i=1;i<=n;i++){
        f>>x;
        if(!x)
            st.push_back(i);
        else{
            L[x].push_back(i);
        }
    }
    for(i=1;i<=m;i++){
        f>>q>>p;
        v[q].q.push_back(p);
        v[q].o.push_back(i);
    }
    for(i=0;i<st.size();i++){
        dfs(st[i]);
    }

    for(i=1;i<=m;i++)
        g<<sol[i]<<"\n";
    f.close();
    g.close();
    return 0;
}