Cod sursa(job #1393091)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 19 martie 2015 08:21:51
Problema Cerere Scor 50
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.03 kb
#include <stdio.h>
int tata[100001];
int x[100001];
int dest[100001];
int n;
int main()
{
    freopen ("cerere.in","r",stdin);
    freopen ("cerere.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&x[i]);
    int p1,p2;
    for(int i=1;i<n;i++)
    {
            scanf("%d%d",&p1,&p2);
            tata[p2]=p1;
    }
    for(int i=1;i<=n;i++)
    {
            if(x[i]==0) dest[i]=0;
            else
            {
                dest[i]=i;
                for(int j=1;j<=x[i];j++)
                {
                        dest[i]=tata[dest[i]];
                }
            }
    }
    for(int i=1;i<=n;i++)
    {
            int counter=0;
            int nod=i;
            if(dest[i]!=0)
            {
                          while(dest[nod]!=0)
                          {
                                           nod=dest[nod];
                                           counter++;
                          }
            }
            printf("%d ",counter);
    }
}