Pagini recente » Cod sursa (job #1598054) | Cod sursa (job #2251876) | Cod sursa (job #2074642) | Cod sursa (job #1873656) | Cod sursa (job #2786440)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
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(){
f >> N;
for(int i = 1;i <= N;i++)
f >> a[i];
for(int i = 1;i < N;i++) {
int a, b;
f >> a >> b;
Gr[a].emplace_back(b);
dad[b] = a;
}
for(;dad[root] != 0;root++);
dfs(root);
for(int i = 1;i <= N;i++)
g << ans[i] - 1 << " ";
}