Pagini recente » Cod sursa (job #1599200) | Cod sursa (job #1799933) | Cod sursa (job #2528290) | Cod sursa (job #58121) | Cod sursa (job #1256654)
#include <stdio.h>
#include <vector>
using namespace std;
#define Nmax 100005
vector < vector<int> > Graph;
int v[Nmax];
int d[Nmax];
int rez[Nmax];
int di;
int n;
void read(){
int x, y;
scanf("%d", &n);
Graph.resize(n + 1);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
for (int i = 1; i < n; ++i){
scanf("%d %d", &x, &y);
Graph[x].push_back(y);
}
}
void dfs(int node){
vector<int>::iterator it;
for (it = Graph[node].begin(); it != Graph[node].end(); ++it){
if (v[*it] == 0)
d[++di] = 0;
else
d[++di] = d[ di - v[*it] ] + 1;
rez[*it] = d[di];
dfs(*it);
}
--di;
}
void solve(){
dfs(1);
for (int i = 1; i <= n; ++i)
printf("%d ", rez[i]);
printf("\n");
}
int main(){
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
read();
solve();
}