Cod sursa(job #1347759)

Utilizator livliviLivia Magureanu livlivi Data 19 februarie 2015 10:38:29
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
#define MAX_N 100000
using namespace std;

int v[MAX_N+1];

int fiu[MAX_N];
int urm[MAX_N];
int lst[MAX_N];

int st[MAX_N+1];
int k;

int rasp[MAX_N+1];


void adauga(int tip,int i){
    urm[i]=lst[tip];
    lst[tip]=i;
}

void parc(int nod){
    int p;

    k++;
    if (v[nod]==0) st[k]=0;
    else st[k]=st[k-v[nod]]+1;
    rasp[nod]=st[k];

    p=lst[nod];
    while(p!=0){
        parc(fiu[p]);
        p=urm[p];
    }

    k--;
}


int main(){
    freopen ("cerere.in","r",stdin);
    freopen ("cerere.out","w",stdout);
    int n,i,a,rad;

    scanf ("%d",&n);
    for(i=1;i<=n;i++)
        scanf ("%d",&v[i]);

    rad=n;
    for(i=1;i<n;i++){
        scanf ("%d%d",&a,&fiu[i]);

        rad=rad^i^fiu[i];

        adauga(a,i);
    }

    k=0;
    parc(rad);

    for(i=1;i<=n;i++)
        printf ("%d ",rasp[i]);

    return 0;
}