Cod sursa(job #355915)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 12 octombrie 2009 18:44:56
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
long x[100005],st[100005],z[100005],u,intel[100005],n,i,f[100005];
struct gra{long a,b;}a[100005];
long cmp(gra a,gra b)
{if(a.a<b.a||(a.a==b.a&&a.b<=b.b))return 1;
return 0;}
void hbnf()
{long p;
 p=x[st[u]];
 z[st[u]]=z[st[u-intel[st[u]]]]+1;
 if(p)
 for(;a[p].a==st[u];++p)
    {st[++u]=a[p].b;
     hbnf();
     --u;}
}
int main()
{
 freopen("cerere.in","r",stdin);
 freopen("cerere.out","w",stdout);
 scanf("%ld",&n);
 for(i=1;i<=n;++i)
    scanf("%ld",&intel[i]);
 for(i=1;i<n;++i)
    {scanf("%ld%ld",&a[i].a,&a[i].b);
     f[a[i].b]++;}
 sort(a+1,a+n,cmp);
 for(i=1;i<n;++i)
    if(!x[a[i].a])x[a[i].a]=i;
 for(i=1;i<=n;++i)
    if(!f[i])break;
 st[1]=i;
 u=1;
 hbnf();
 for(i=1;i<=n;++i)printf("%ld ",z[i]-1);
 printf("\n");
 return 0;
}