Pagini recente » Cod sursa (job #864498) | Cod sursa (job #2377478) | Cod sursa (job #239497) | Cod sursa (job #722687) | Cod sursa (job #2735169)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int nmax = 1e5 + 5;
int n, x, k[nmax], ans[nmax], b[nmax];
bool vis[nmax];
vector <int> v[nmax];
void read(){
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;
vis[y] = 1;
v[x].push_back(y);
}
}
void ancestor(){
for(int i = 1; i <= n; i++)
if(!vis[i]){
x = i;
break;
}
}
void solve(int nod, int niv){
if(k[nod] != 0)
ans[nod] = 1 + ans[b[niv - k[nod]]];
b[niv] = nod;
for(auto nd : v[nod])
solve(nd, niv + 1);
}
void print(){
for(int i = 1; i <= n; i++)
fout << ans[i] << " ";
}
int main()
{
read();
ancestor();
solve(x, 0);
print();
return 0;
}