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