Cod sursa(job #588911)

Utilizator MKLOLDragos Ristache MKLOL Data 9 mai 2011 23:48:40
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<vector>
#include<stdio.h>
#include<algorithm>

#define pb push_back

using namespace std;

vector<int> g[101010];
int stiv[101010],k;
int rez[101010],c[101010],N,x,y,viz[101010];
using namespace std;

int df(int x)
{stiv[++k]=x;

    if(c[x])
    rez[x]=rez[stiv[k-c[x]]]+1;

    for(int i=0;i<g[x].size();++i)
    {
            df(g[x][i]);
    }
    --k;
}

int main()
{
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&N);
    for(int i=1;i<=N;++i)
        scanf("%d",&c[i]);
    for(int i=1;i<N;++i)
    {
        scanf("%d%d",&x,&y);
        g[x].pb(y);
        viz[y]=1;
    }
    for(int i=1;i<=N;++i)
    if(!viz[i])
    {
        df(i);
    }
    for(int i=1;i<=N;++i)
    printf("%d ",rez[i]);
return 0;
}