Pagini recente » Cod sursa (job #3240731) | Cod sursa (job #2204202) | Cod sursa (job #1082614) | Cod sursa (job #1875076) | Cod sursa (job #67232)
Cod sursa(job #67232)
#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 nr[NMAX], vf;
int rez[NMAX];
int g[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);
g[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();
int rad=0;
for(int i=1;i<=n;++i) if( k[i]==0 && g[i]==0) { rad=i; break;}
df(rad);
for(int i = 1; i <= n; ++i)
printf("%d ", rez[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}