Pagini recente » Cod sursa (job #2533509) | Cod sursa (job #830993) | Cod sursa (job #949873) | Cod sursa (job #2359004) | Cod sursa (job #1582454)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
const int Mn = 1e5 + 6;
int n,it;
int k[Mn],sol[Mn],stk[Mn];
bool used[Mn];
vector< int > g[Mn];
void dfs(int node)
{
stk[++it] = node;
if (k[node])
sol[node] = sol[stk[it - k[node]]] + 1;
for (int i = 0;i < g[node].size();i++)
dfs(g[node][i]);
it--;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for (int i = 1;i <= n;i++)
scanf("%d",&k[i]);
for (int i = 1;i < n;i++)
{
int x,y;
scanf("%d %d",&x,&y);
g[x].push_back(y);
used[y] = 1;
}
int i = 1;
for (;used[i];i++);
dfs(i);
for (int i = 1;i <= n;printf("%d ",sol[i]),i++);
printf("\n");
return 0;
}