Cod sursa(job #605794)

Utilizator crushackPopescu Silviu crushack Data 2 august 2011 00:39:22
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <vector>
#define NMax 100010
using namespace std;

const char IN[]="cerere.in",OUT[]="cerere.out";

int N;
int a[NMax] , T[NMax];
vector<int> ad[NMax] , v;

void dfs(int x=1)
{
    if (a[x] && x!=1) T[x]=T[*(v.end()-a[x])]+1;
    v.push_back(x);
    for (vector<int>::iterator it=ad[x].begin();it<ad[x].end();++it)
        dfs(*it);
    v.pop_back();
}

int main()
{
    int i,x,y;
    freopen(IN,"r",stdin);
    scanf("%d",&N);
    for (i=1;i<=N;++i) scanf("%d",a+i);
    for (i=1;i<N;++i)
        scanf("%d%d",&x,&y),
        ad[x].push_back(y);
    fclose(stdin);

    dfs();

    freopen(OUT,"w",stdout);
    for (i=1;i<=N;++i)
        printf("%d ",T[i]);
    printf("\n");
    fclose(stdout);

    return 0;
}