Pagini recente » Cod sursa (job #762991) | Cod sursa (job #1726241) | Cod sursa (job #1633867) | Cod sursa (job #2034833) | Cod sursa (job #494837)
Cod sursa(job #494837)
#include <cstdio>
#include <vector>
int v[250001], leaves[250001];
int main ()
{
std::vector < std::vector <int> > vv;
FILE *in=fopen("stramosi.in", "r"), *out=fopen("stramosi.out", "w");
int n, m, value, s1, s2;
fscanf(in, "%d%d", &n, &m);
for(int i=0; i<n; ++i)
{
fscanf(in, "%d", v+i+1);
leaves[v[i+1]]=-1;
}
vv.push_back(std::vector <int>());//primul nu ne intereseaza vv[0]
for(int i=1; i<=n; ++i)
{
if(!leaves[i])
{
value=i;
vv.push_back(std::vector <int>());
vv[vv.size()-1].push_back(i);
leaves[value]=vv.size()-1;
while(v[value]!=0)
{
value=v[value];
vv[vv.size()-1].push_back(value);
leaves[value]=vv.size()-1;
}
}
}
for(int i=0; i<m; ++i)
{
fscanf(in, "%d%d", &s1, &s2);
value=leaves[s1];
int j=0;
for(;vv[value][j]!=s1; ++j);
if(s2+j<vv[value].size())
fprintf(out, "%d\n", vv[value][s2+j]);
else
fprintf(out, "0\n");
}
return 0;
}