Pagini recente » Cod sursa (job #2642251) | Cod sursa (job #69415) | Cod sursa (job #787045) | Cod sursa (job #1687351) | Cod sursa (job #2786441)
#include <bits/stdc++.h>
using namespace std;
const int Lim = 1000001;
int u = Lim - 1;
char S[Lim];
void Next() {
if(++u == Lim)
(void)!std::fread(S, 1, Lim, stdin), u = 0;
}
void Get(int &x) {
for(;S[u] < '0' || S[u] > '9'; Next());
for(x = 0;S[u] >= '0' && S[u] <= '9'; Next())
x = x * 10 + S[u] - '0';
}
void Put(int x) {
if(x <= 9) putchar_unlocked((char)(x + '0'));
else {
Put(x / 10);
putchar_unlocked((char)(x % 10 + '0'));
}
}
inline void Open(const string Name) {
#ifndef ONLINE_JUDGE
(void)!freopen((Name + ".in").c_str(), "r", stdin);
(void)!freopen((Name + ".out").c_str(), "w", stdout);
#endif
}
vector <int> Gr[100001];
int a[100001], ans[100001], dad[100001];
int N, root = 1;
void dfs(int v, int lvl = 0) {
dad[lvl] = v;
ans[v] = ans[dad[lvl - a[v]]] + 1;
for(int to : Gr[v])
dfs(to, lvl + 1);
}
int main(){
Open("cerere");
Get(N);
for(int i = 1;i <= N;i++)
Get(a[i]);
for(int i = 1;i < N;i++) {
int a, b;
Get(a), Get(b);
Gr[a].emplace_back(b);
dad[b] = a;
}
for(;dad[root] != 0;root++);
dfs(root);
for(int i = 1;i <= N;i++)
Put(ans[i] - 1), putchar_unlocked(' ');
}