Pagini recente » Cod sursa (job #2405115) | Cod sursa (job #1494247) | Cod sursa (job #3212998) | Cod sursa (job #1411921) | Cod sursa (job #500917)
Cod sursa(job #500917)
#include<fstream>
#include<vector>
#define dmax 250003
#define mmax 300003
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m,k,r[dmax],st[dmax];
struct query
{ int a;
int b;
int s;
} q[mmax];
struct z
{ int nr;
int crt;
};
vector<struct z>x[dmax];
vector<struct z>::iterator ir;
vector<int>g[dmax];
void dfs(int k,int p)
{ int i;
vector<int>::iterator it;
for(ir=x[k].begin();ir<x[k].end();ir++)
{ if(ir->nr >= p-1)
q[ir->crt].s=0;
else q[ir->crt].s=st[p-ir->nr-1];
}
for(it=g[k].begin();it<g[k].end();it++)
{ st[p]=*it;
dfs(*it,p+1);
}
}
int main()
{ int i;
z w;
in>>n>>m;
for(i=1;i<=n;i++)
{ in>>k;
r[i]=k;
g[k].push_back(i);
}
for(i=1;i<=m;i++)
{ in>>q[i].a>>q[i].b;
w.crt=i;
w.nr=q[i].b;
x[q[i].a].push_back(w);
}
in.close();
for(i=1;i<=n;i++)
if(!r[i])
{ st[1]=i;
dfs(i,2);
}
for(i=1;i<=m;i++)
out<<q[i].s<<'\n';
out.close();
return 0;
}