Pagini recente » sim_oji111 | Cod sursa (job #1576003) | Cod sursa (job #2641033) | Cod sursa (job #1390330) | Cod sursa (job #2049326)
#include <fstream>
#include <vector>
using namespace std;
const int N = 250005;
const int M = 300005;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
struct intrebare
{
int poz,q;
}v[M];
int n,m;
vector <int> V[N];
vector <int> lst[N];
int stiv[N],k;
bool viz[N];
bool tata[N];
int rasp[M];
void raspund(int val)
{
//g<<val<<"| ";
for(int i = 0; i < lst[val].size(); i++)
{
int num = lst[val][i];
int ind = k - v[num].q;
//g<<lst[val][i]<<" ";
if(ind > 0 )
{
rasp[num] = stiv[ind];
}
else
rasp[num] = 0;
}
//g<<"\n";
}
void dfs(int x)
{
k++;
viz[x] = 1;
stiv[k] = x;
raspund(x);
for(int i = 0; i < V[x].size();i++)
{
int num = V[x][i];
if(viz[num]==0)
{
dfs(num);
}
}
k--;
}
int main()
{
f>>n>>m;
for(int i = 1; i<= n; i++)
{
int x;
f>>x;
if(x > 0)
{
V[x].push_back(i);
tata[i] = 1;
}
}
for(int i = 1; i<= m; i++)
{
int p;
f>>p>>v[i].q;
v[i].poz = i;
lst[p].push_back(i);
}
for(int i = 1; i<= n; i++)
{
if(tata[i] == 0)
{
dfs(i);
}
}
for(int i = 1; i<= m; i++)
{
g<<rasp[i]<<"\n";
}
f.close();
g.close();
return 0;
}