Cod sursa(job #1170449)

Utilizator hevelebalazshevele balazs hevelebalazs Data 13 aprilie 2014 17:31:28
Problema Cerere Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>
#include<stdlib.h>
#define fr(i,a,b) for(i=a;i<b;++i)
#define N 100000
int s[N],S,X[N],k[N],*o[N],O[N];
void dfs(int i){
    s[S++]=i;
    X[i]=k[i]?1+X[s[S-1-k[i]]]:0;
    int j;
    fr(j,0,O[i]) dfs(o[i][j]);
    --S;
    }
int main(){
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    int i,n,x,y;
    scanf("%i",&n);
    fr(i,0,n)scanf("%i",k+i);
    fr(i,1,n){
        scanf("%i%i",&x,&y);
        --x;
        --y;
        o[x]=(int*)realloc(o[x],++O[x]*sizeof(int));
        o[x][O[x]-1]=y;
        X[y]=1;
        }
    fr(i,0,n)if(!X[i]){dfs(i);break;};
    fr(i,0,n)printf("%i ",X[i]);
    return 0;
    }