Pagini recente » Cod sursa (job #2683122) | Cod sursa (job #2166100) | Cod sursa (job #219127) | Cod sursa (job #93603) | Cod sursa (job #2711490)
#include <bits/stdc++.h>
#define fin cin
#define ll long long
#define sz(x) (int)(x).size()
#define debug(v,n) for (int i = 1; i <= (n); ++i) cout << v[i] << " ";
#define next cout << '\n'
using namespace std;
const int N = 1e5 + 5;
int n, k[N], ans[N];
bool done[N];
vector<int> graf[N], in;
void dfs(int nod) {
in.push_back(nod);
//cout << (sz(in) - 1) << " " << k[nod] << '\n';
//cout << in[(sz(in) - 1) - k[nod]] << '\n';
assert(sz(in) >= k[nod]);
ans[nod] = ans[in[(sz(in) - 1) - k[nod]]] + 1;
for (int to : graf[nod]) {
dfs(to);
}
if(sz(in) != 1)
in.pop_back();
}
int main() {
//ifstream fin("date.in.txt");
ifstream fin("cerere.in");
ofstream fout("cerere.out");
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> k[i];
for (int i = 1; i < n; ++i) {
int a, b;
fin >> a >> b;
graf[a].push_back(b);
}
dfs(1);
for (int i = 1; i <= n; ++i)
fout << ans[i] - 1<< " ";
return 0;
}