Pagini recente » Cod sursa (job #1857603) | Cod sursa (job #2281438) | Cod sursa (job #237760) | Cod sursa (job #1801784) | Cod sursa (job #1830996)
#include<fstream>
#include<vector>
#define NMAX 100005
using namespace std;
int n, k[NMAX], x, y, s[NMAX], sol[NMAX];
vector<int> G[NMAX];
bool u[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);
u[y] = true;
}
int rad = 0;
for(int i = 1; i <= n; i++)
{
if(!u[i])
{
rad = i;
break;
}
}
dfs(rad, 0);
for(int i = 1; i <= n; i++)
{
cout << sol[i] << " ";
}
return 0;
}