Cod sursa(job #993581)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 4 septembrie 2013 07:54:53
Problema Cerere Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
int r,n,m,o[100005],t[100005],c[100005],p[100005],*g[100005],w[100005],i,j,d[100005],a[100005],b[100005];
 
void D(int i)
{
     int j;
     for(d[i]=1,j=0;j<w[i];j++)
          o[m++]=g[i][j],p[g[i][j]]=p[o[m-1-c[g[i][j]]]]+1,D(g[i][j]),m--;
}
 
int main ()
{
     freopen("cerere.in","r",stdin),
     freopen("cerere.out","w",stdout),
     scanf("%d",&n);
     for(i=1;i<=n;i++)
          scanf("%d",&c[i]),p[i]=-1;
     for(i=1;i<n;i++)
          scanf("%d%d",&a[i],&b[i]),w[a[i]]++,t[b[i]]=a[i];
     for(i=1;i<=n;w[i++]=0)
          g[i]=new int[w[i]];
     for(i=1;i<n;i++)
          g[a[i]][w[a[i]]++]=b[i];
     for(j=i=1;i<=n&&j;i++)
     if(!t[i])
          r=i,j=0;
     o[m++]=r,p[r]=0,D(r);
     for(i=1;i<=n;i++)
          printf("%d ",p[i]);
}