Cod sursa(job #353443)

Utilizator mottyMatei-Dan Epure motty Data 5 octombrie 2009 10:36:55
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<cstdio>
#include<vector>

using namespace std;

const int N=1<<17;

vector <int> f[N];

int n,q[N],v[N],t[N],k=0;

void read()
{
    int x,y;
    scanf("%d",&n);
    for( int i=1 ; i<=n ; ++i )
        scanf("%d",&q[i]);
    for( int i=1 ; i<n ; ++i )
    {
        scanf("%d%d",&x,&y);
        f[x].push_back(y);
    }
}

void dfs(int x)
{
    v[++k]=x;
    if(q[x])
        t[x]=t[v[k-q[x]]]+1;
    for( int i=0 ; i<f[x].size() ; ++i )
        dfs(f[x][i]);
    --k;
}

void print()
{
    for( int i=1 ; i<=n ; ++i )
        printf("%d ",t[i]);
}

int main()
{
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    read();
    dfs(1);
    print();
    return 0;
}