Pagini recente » Cod sursa (job #150574) | Cod sursa (job #1849952) | Cod sursa (job #1069935) | Cod sursa (job #850117) | Cod sursa (job #364659)
Cod sursa(job #364659)
#include <cstdio>
#include <vector>
#define NMAX 100010
using namespace std;
vector <int> G[NMAX];
int n, K[NMAX], S[NMAX], Sol[NMAX], h;
char U[NMAX], V[NMAX];
void df(int nod)
{
int i;
h++;
S[h]=nod;
U[nod]=1;
if (K[nod])
Sol[nod]=Sol[S[h-K[nod]]]+1;
for (i=0; i<G[nod].size(); i++)
if (!U[G[nod][i]])
df(G[nod][i]);
h--;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
int i, r, x, y;
for (i=1; i<=n; i++) scanf("%d",&K[i]);
for (i=1; i<n; i++)
{
scanf("%d %d",&x, &y);
G[x].push_back(y);
V[y]++;
}
for (r=1; r<=n && V[r]; r++);
K[r]=0;
df(r);
for (i=1; i<=n; i++) printf("%d ",Sol[i]);
}