Pagini recente » Cod sursa (job #8404) | Cod sursa (job #2390965) | Cod sursa (job #995759) | Cod sursa (job #918166) | Cod sursa (job #640760)
Cod sursa(job #640760)
using namespace std;
#include <cstdio>
#define DIM 8192
#define maxn 300001
char ax[DIM+16];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax, 1, DIM, stdin), pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1, DIM, stdin),pz=0;
}
}
struct nod { int x; nod *n;};
struct node{ int q, pos;node*n;};
nod *a[250001];
node *A[250001];
int n,m;
bool use[250001];
int tata[250001];
int sol[300001];
int st[250001];
void read()
{
freopen("stramosi.in","r",stdin);
//scanf("%d %d\n",&n, &m);
cit(n);cit(m);
int i,p,q;
//printf("%d %d\n", n,m);
for(i=1;i<=n;++i)
{
//scanf("%d ", &p);
cit(p);
//printf("%d\n", p);
tata[i]=p;
nod *t=new nod;
t->x=i;
t->n=a[p];
a[p]=t;
}
for(i=1;i<=m;++i)
{
// scanf("%d %d\n", &p,&q);
cit(p);cit(q);
node *t=new node;
t->q=q;
t->pos=i;
t->n=A[p];
A[p]=t;
}
}
inline void dfs(int n, int k)
{
use[n]=1;
st[k]=n;
for(node *i = A[n] ; i ; i = i->n)
if(k >= i->q)
sol[i->pos]=st[k-i->q];
for(nod *i=a[n]; i; i=i->n)
if(!use[i->x])
dfs(i->x,k+1);
}
void solve()
{
int i;
for(i=1;i<=n;++i)
if(!tata[i])
dfs(i, 0);
freopen("stramosi.out","w",stdout);
for(i=1;i<=m;++i)printf("%d\n", sol[i]);
}
int main()
{
read();
solve();
return 0;
}