Pagini recente » Cod sursa (job #297918) | Cod sursa (job #1930610) | Cod sursa (job #2067641) | Cod sursa (job #2857368) | Cod sursa (job #3313101)
#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];
}
bool rad[100007]={0};
for (int j=2;j<=n;j++) {
int x,y;
f>>x>>y;
rad[y]=1;
copii[x].push_back(y) ;
}
for (int i=1;i<=n;i++) {
if (rad[i]==0) {
bk(i);
}
}
for (int i=1;i<=n;i++)
g<<ans[i]<<" ";
return 0;
}