Pagini recente » Cod sursa (job #3214369) | Cod sursa (job #417989) | Cod sursa (job #3131226) | Cod sursa (job #1905608) | Cod sursa (job #1833887)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int N = 100100;
int n, t, ans[N], s[N], T[N], k[N];
vector<int> G[N];
void DF(int x) {
s[++t] = x;
if(k[x]) {
ans[x] = ans[s[t - k[x]]] + 1;
}
for(int i = 0; i < G[x].size(); ++i) {
DF(G[x][i]);
}
--t;
}
int main () {
fin >> n;
for(int i = 1; i <= n; ++i) {
fin >> k[i];
}
for(int i = 1; i < n ; ++i) {
int x, y;
fin >> x >> y;
G[x].push_back(y);
T[y]=1;
}
for(int i = 1; i <= n; ++i) {
if(!T[i]) {
DF(i);
break;
}
}
for(int i = 1; i <= n; ++i) {
fout << ans[i] << ' ';
}
return 0;
}