Pagini recente » Cod sursa (job #2069758) | Cod sursa (job #1889221) | Cod sursa (job #1673529) | Cod sursa (job #222027) | Cod sursa (job #3351160)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
#define cin fin
#define cout fout
const int NMAX = 1e5 + 5;
vector<int> mat[NMAX];
int a[NMAX];
int v[NMAX];
int sol[NMAX];
void dfs(int nod, int h){
if (v[nod] == 0) sol[nod] = 0;
else
sol[nod] = sol[a[h - v[nod]]] + 1;
a[h] = nod;
for (auto i : mat[nod]){
dfs(i, h + 1);
}
}
vector<bool> isRad(NMAX, true);
int main(){
int n;
cin >> n;
for (int i = 1; i <= n; ++ i){
cin >> v[i];
}
for (int i = 1, x, y; i < n; ++ i){
cin >> x >> y;
mat[x].push_back(y);
isRad[y] = false;
}for (int i = 1; i<= n; ++ i){
if (isRad[i] == true){
dfs(i, 0);
}
}
for (int i = 1; i <= n; ++ i){
cout << sol[i] << ' ';
}
return 0;
}