Pagini recente » Cod sursa (job #387867) | Cod sursa (job #360112) | Cod sursa (job #1937095) | Cod sursa (job #1954992) | Cod sursa (job #1830985)
#include<fstream>
#include<vector>
#define NMAX 100005
using namespace std;
int n, k[NMAX], x, y, s[NMAX], sol[NMAX];
vector<int> G[NMAX];
ifstream cin("cerere.in");
ofstream cout("cerere.out");
void dfs(int nod, int nivel)
{
s[nivel] = nod;
if(k[nod] == 0)
{
sol[nod] = 0;
}else
{
int ki = s[nivel - k[nod]];
sol[nod] = 1 + sol[ki];
}
for(int i = 0; i < G[nod].size(); i++)
{
int fiu = G[nod][i];
dfs(fiu, nivel + 1);
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> k[i];
}
for(int i = 1; i < n; i++)
{
cin >> x >> y;
G[x].push_back(y);
}
dfs(1, 0);
for(int i = 1; i <= n; i++)
{
cout << sol[i] << " ";
}
return 0;
}