Cod sursa(job #6642)

Utilizator mariusdrgdragus marius mariusdrg Data 20 ianuarie 2007 13:56:12
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<vector>


using namespace std;

const int maxn = 100001;

vector <int> vect[maxn];

int l;
int n;
int st[maxn];
int le[maxn];
int k[maxn];
int nr[maxn];
int i;
int j;
int x;
int y;


void dfs(int i)
{
        vector <int>:: iterator it;
        l++;
        st[l]=i;
        int x=*it;
        if (k[i])
        {
                le[l]=le[l-k[i]]+1;
        }
        else
        {
                le[l]=0;
        }
        for(it=vect[i].begin();it!=vect[i].end();it++)
        {
                int x=*it;
                dfs(*it);

        }
        nr[st[l]]=le[l];
        l--;
        
}


int main()
{
        freopen("cerere.in","r",stdin);
        freopen("cerere.out","w",stdout);
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
                scanf("%d",&k[i]);

        }
        for(i=1;i<=n-1;i++)
        {
                scanf("%d %d",&x,&y);
                vect[x].push_back(y);
                nr[y]++;
        }
        for(i=1;i<=n;i++)
                if (nr[i]==0) break;
        dfs(i);
        for(i=1;i<=n;i++)
                printf("%d ",nr[i]);
        printf("\n");
        return 0;
}