Pagini recente » Cod sursa (job #3362046) | Cod sursa (job #3362173) | Cod sursa (job #3362232) | Cod sursa (job #3361877) | Cod sursa (job #3362048)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int salt[100001];
int rez[100001];
bool padre[100001];
vector <int> stk;
void dfs(int node, vector <vector<int>> &fii) {
stk.push_back(node);
if (salt[node]>0) {
rez[node] = rez[stk[stk.size()-salt[node]-1]]+1;
}else {
rez[node] = 0;
}
for (int i=0;i<fii[node].size();i++) {
dfs(fii[node][i],fii);
}
stk.pop_back();
}
int main() {
int n;
fin >> n;
vector <vector <int>> fii(n+1);
for (int i=1;i<=n;i++) {
fin >> salt[i];
}
for (int i=1;i<=n-1;i++) {
int a,b;
fin >> a >> b;
fii[a].push_back(b);
padre[b]=1;
}
int val=0;
for (int i=1;i<=n;i++) {
if (padre[i]==0) {
val=i;
break;
}
}
dfs(val,fii);
for (int i=1;i<=n;i++) {
fout << rez[i] << " ";
}
return 0;
}