Pagini recente » Cod sursa (job #2233173) | Cod sursa (job #196900) | Cod sursa (job #2407349) | Cod sursa (job #2294758) | Cod sursa (job #1077214)
#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], f[100005];
void bfs(int x)
{
int p, u;
c[1] = x;
p=1;
u=1;
while(p<=u)
{
for(int i = 0; i< v[c[p]].size(); i++ )
{
c[++u] = v [c[p]] [i];
if(k[c[u]] == 0)
t[c[u]] = 0;
else
{
int a = c[u];
for(int j = 1; j <= k[c[u]]; j++)
a = f[a];
t[c[u]] = t[a] +1;
}
}
p++;
}
}
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]);
for( i = 1; i <= n-1; i++)
{
scanf("%ld %ld",&a,&b);
v[a].push_back(b);
s -= b;
f[b] = a;
}
bfs(s);
for( i=1; i<= n; i++)
printf("%ld ",t[i]);
return 0;
}