Pagini recente » Cod sursa (job #3167480) | Cod sursa (job #1239144) | Cod sursa (job #2893817) | Cod sursa (job #2219255) | Cod sursa (job #67235)
Cod sursa(job #67235)
#include <stdio.h>
#include <vector>
#include <stack>
using namespace std;
#define NMAX 100004
#define sz size()
#define pb push_back
vector<int> a[NMAX];
int k[NMAX], n;
int grad[NMAX];
int nr[NMAX], vf;
int rez[NMAX];
void read()
{
int i;
int x, y;
scanf("%d", &n);
for(i = 1; i <= n; ++i)
scanf("%d", k+i);
for(i = 1; i < n; ++i)
{
scanf("%d %d", &x, &y);
a[x].pb(y);
++grad[y];
}
/*for(x = 1; x <= 10; ++x)
{
for(y = 0; y < a[x].sz; ++y)
printf("%d ", a[x][y]);
printf("\n");
} */
//printf("%d %d", a[1][0], a[1][1]);
}
void df(int x)
{
int i;
nr[vf] = x;
rez[x] = 1 + rez[ nr[vf-k[x]] ];
if(!k[x])
rez[x] = 0;
for(i = 0; i < a[x].sz; ++i)
{
++vf;
df(a[x][i]);
--vf;
}
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
read();
for(int i = 1; i <= n; ++i)
if(!grad[i])
{
vf = 1;
df(i);
break;
}
for(int i = 1; i <= n; ++i)
printf("%d ", rez[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}