Pagini recente » Cod sursa (job #683772) | Cod sursa (job #1966531) | Cod sursa (job #2255666) | Cod sursa (job #2851585) | Cod sursa (job #2439258)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> g[100005];
int n, poz, k[100005], nr[100005], s[100005];
bool tata[100005];
void read(){
fin >> n;
for (int i = 1; i <= n; i++)
fin >> k[i];
for (int i = 1; i < n; i++){
int a, b;
fin >> a >> b;
g[a].push_back(b);
tata[b] = 1;
}
}
void dfs(int nod){
s[++poz] = nod;
if (k[nod] > 0)
nr[nod] = 1 + nr[s[poz - k[nod]]];
for (auto i : g[nod])
dfs(i);
poz--;
}
void solve(){
int rad = 0;
for (int i = 1; i <= n; i++)
if (!tata[i])
rad = i;
dfs(rad);
for (int i = 1; i <= n; i++)
fout << nr[i] << ' ';
fout << '\n';
}
int main()
{
read();
solve();
return 0;
}