Pagini recente » Cod sursa (job #1548989) | Cod sursa (job #2855228) | Cod sursa (job #1151970) | Cod sursa (job #1630920) | Cod sursa (job #1357153)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#include <stack>
using namespace std;
deque <int> cereri[250002],raspunsuri[250002],stiva;
vector <int> vecini[250002];
int viz[250002];
void dfs(int nod){
int i,x;
viz[nod] = 1;
stiva.push_back(nod);
if(!cereri[nod].empty()){ // daca am cereri la nodul nod ma uit in coada si le pot satisface
for( i = 0; i < cereri[nod].size(); i++ ){
x = cereri[nod][i];
if(stiva.size() > x)
raspunsuri[nod].push_front(stiva[stiva.size()- 1 - x]); // cautam al x-lea stramos
else
raspunsuri[nod].push_front(0);
}
}
for( i =0; i <vecini[nod].size(); i++){
if(viz[vecini[nod][i]] == 0){
dfs(vecini[nod][i]);
}
}
stiva.pop_back();
}
int main()
{
int n,m,p,q,i = 1;
ifstream f("stramosi.in",ios::in);
ofstream g("stramosi.out",ios::out);
f>>n>>m;
// lista de adiacenta
for(i = 1;i <= n ; i++){
f>>p;
vecini[p].push_back(i);
}
/*
for(i = 0;i <= n ; i++){
cout<<i<<" : ";
for(int j = 0; j <vecini[i].size(); j++)
cout<<vecini[i][j]<<" ";
cout<<endl;
}
*/
// citesc cererile
while(m){
f>>q>>p;
cereri[q].push_front(p); // pt fiecare membru p am o lista cu cereri de stramosi
m--;
}
/*
for(i = 0;i <= n ; i++){
cout<<i<<" : ";
for(int j = 0; j <cereri[i].size(); j++)
cout<<cereri[i][j]<<" ";
cout<<endl;
}
*/
dfs(0);
f.close();
ifstream h("stramosi.in",ios::in);
h>>n>>m;
for(i = 1;i <= n ; i++){
h>>p;
}
while(m){
h>>q>>p;
g<<raspunsuri[q].back()<<" ";
raspunsuri[p].pop_back();
m--;
}
return 0;
}