Pagini recente » Cod sursa (job #1320524) | Cod sursa (job #2536241) | Cod sursa (job #3275306) | Cod sursa (job #623426) | Cod sursa (job #1090267)
#include <stdio.h>
#include <list>
#define NMAX 100005
using namespace std;
int K[NMAX],A[NMAX],Q[NMAX],NR,N;
list<int> G[NMAX];
bool T[NMAX],viz[NMAX];
void read()
{
int i,a,b;
scanf("%d\n",&N);
for (i=1;i<=N;i++) scanf("%d ",&K[i]);
for (i=1;i<N;i++)
{
scanf("%d %d\n",&a,&b);
G[a].push_back(b);
T[b]=1;
}
}
void dfs(int p)
{
NR++;
Q[NR]=p;
A[p]=A[Q[NR-K[p]]]+1;
list<int>:: iterator it;
for (it=G[p].begin();it!=G[p].end();it++)
dfs(*it);
NR--;
}
void solve()
{
int i,j;
for (i=1;i<=N;i++)
if (!T[i]){j=i;break;}
dfs(j);
for (i=1;i<=N;i++) printf("%d\n",A[i]-1);
}
int main()
{
freopen ("cerere.in","r",stdin);
freopen ("cerere.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}