Pagini recente » Cod sursa (job #125985) | Cod sursa (job #3148047) | Cod sursa (job #2431539) | Cod sursa (job #2413624) | Cod sursa (job #189239)
Cod sursa(job #189239)
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#define NMAX 100000
struct lista { int val; lista *last; } *p[NMAX+5];
int n, cerere[NMAX+5],st[NMAX+5],sol[NMAX+5],fiu[NMAX+5];
void df(int x,int k)
{
st[k]=x;
if(cerere[x] != 0) sol[x] = 1 + sol[ st[k-cerere[x]] ];
for(lista *p1=p[x]; p1!=NULL; p1=p1->last) df(p1->val, k+1);
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d", &cerere[i]);
int var1,var2; lista *p1;
for(i=1; i<n; i++)
{
scanf("%d %d", &var1,&var2); fiu[var2]=var1;
p1 = new lista;
p1->val = var2;
p1->last = p[var1];
p[var1] = p1;
}
for(i=1; i<=n; i++) if( !fiu[i] ) { df(i,1); break; }
for(i=1; i<=n; i++) printf("%d ", sol[i]);
printf("\n"); return 0;
}