Pagini recente » oni_2017_cl10_ziua2_ | Termeni si conditii de utilizare a site-ului infoarena | Cod sursa (job #59745) | Cod sursa (job #3186285) | Cod sursa (job #1781539)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define MAXN 250010
#define MAXM 350010
int n,m,v[MAXM],x,y,stv[MAXM],d,i,stramosi[MAXN],dim[MAXN];
vector <int> G[MAXN],Q[MAXN],rez[MAXN];
void str(int nod)
{
d++;
stv[d]=nod;
for(auto itr:Q[nod])
{
x=d-itr;
if(x>=1)
rez[nod].push_back(stv[x]);
else
rez[nod].push_back(0);
}
for(auto it:G[nod])
str(it);
d--;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
stramosi[i]=x;
G[x].push_back(i);
}
for(i=1;i<=m;i++)
{
f>>x>>y;
v[i]=x;
Q[x].push_back(y);
}
for(i=1;i<=n;i++)
if(stramosi[i]==0) {
d=0;
str(i);
}
for(i=1;i<=m;i++)
{
g<<rez[v[i]][dim[v[i]]]<<"\n";
dim[v[i]]++;
}
return 0;
}