Pagini recente » Cod sursa (job #3365739) | Cod sursa (job #3365717) | Cod sursa (job #3365691) | Cod sursa (job #3365687) | Cod sursa (job #3364738)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX = 1e5 + 1;
int n, nr[NMAX], ans[NMAX], kth[NMAX], parent[NMAX];
vector<int> adj[NMAX];
int stk[NMAX], vf = 0, root = -1;
bool smart[NMAX];
void dfs(int node)
{
stk[++vf] = node;
kth[node] = stk[vf - nr[node]];
ans[node] = (smart[node] ? 0 : 1 + ans[kth[node]]);
for(int next : adj[node])
{
if(next == parent[node])
continue;
dfs(next);
}
vf--;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
{
fin >> nr[i];
smart[i] = (nr[i] == 0);
}
for(int i = 1; i <= n - 1; i++)
{
int u, v; fin >> u >> v;
parent[v] = u;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 1; i <= n; i++)
if(parent[i] == 0)
root = i;
smart[root] = true;
dfs(root);
for(int i = 1; i <= n; i++)
fout << ans[i] << " ";
fin.close();
fout.close();
return 0;
}