Pagini recente » Cod sursa (job #1980994) | Cod sursa (job #2931659) | Cod sursa (job #578113) | Cod sursa (job #2218450) | Cod sursa (job #1077218)
#include<fstream>
#include<vector>
#include<iostream>
# include <stdio.h>
using namespace std;
vector<int> v[100005];
int n, m, k[100005], i, j, a, b, t[100005], c[100005], viz[100005];
void dfs(int x)
{
c[++m]=x;
int i;
if(viz[x])
t[x]=0;
else
t[x]=t[ c[ m-k[x] ] ] + 1;
for( i = 0; i < v[x].size(); i++)
dfs(v[x][i]);
m--;
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int s;
scanf("%ld",&n);
s = n*(n+1)/2;
for( i = 1; i <= n; i++)
{
scanf("%ld",&k[i]);
if(k[i]==0)
viz[i] = 1;
}
for( i = 1; i <= n-1; i++)
{
scanf("%ld %ld",&a,&b);
v[a].push_back(b);
s -= b;
}
dfs(s);
for( i=1; i<= n; i++)
printf("%ld ",t[i]);
return 0;
}