Pagini recente » Cod sursa (job #2343184) | Cod sursa (job #1421763) | Cod sursa (job #677253) | Profil Askmeoffers7 | Cod sursa (job #3301048)
#include <fstream>
#include <vector>
using namespace std;
///it doesn't work
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int nmax = 250005;
const int mmax = 300005;
vector <int> sons[nmax];
vector <pair<int , int>> queries[nmax];
vector <int> crnt;
int sol[mmax];
void dfs(int dad)
{
crnt.push_back(dad);
for(auto qry : queries[dad])
{
int idx = qry.second;
int ancs = qry.first;
if(crnt.size() - 1 - ancs >= 0)
{
sol[idx] = crnt[crnt.size() - 1 - ancs];
}
}
for(int son : sons[dad])
{
dfs(son);
}
crnt.pop_back();
}
int main() ///stramosi in o(n + m)
{
int n , m;
fin >> n >> m;
for(int i = 1;i <= n;i++)
{
int dad;
fin >> dad;
sons[dad].push_back(i);
}
for(int i = 1;i <= m; i++)
{
int ancs , son;
fin >> ancs >> son;
queries[son].push_back({ancs , i}); ///{ancestor , index}
}
dfs(0);
for(int i = 1; i <= m; i++)
{
fout << sol[i] << '\n';
}
return 0;
}