Pagini recente » Monitorul de evaluare | Cod sursa (job #1360417) | Cod sursa (job #294551) | Cod sursa (job #2181073) | Cod sursa (job #3313096)
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector<int> stack;
vector<int> copii[100007];
int ans[100007];
int nrK[100007];
void bk(int id) {
stack.push_back(id);
if (nrK[id]==0) {
ans[id]=0;
}else {
ans[id]=ans[stack[stack.size()-nrK[id]-1]]+1;
}
for (int i:copii[id]) {
bk(i);
}
stack.pop_back();
}
int main() {
int n;
f>>n;
for (int i=1;i<=n;i++) {
f>>nrK[i];
}
for (int j=1;j<=n;j++) {
int x,y;
f>>x>>y;
copii[x].push_back(y) ;
}
stack.push_back(1);
bk(1);
for (int i=1;i<=n;i++)
cout<<ans[i]<<" ";
return 0;
}