Cod sursa(job #1774885)

Utilizator mariusn01Marius Nicoli mariusn01 Data 9 octombrie 2016 16:08:08
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define DIM 100001


struct nod {
    int v;
    nod *urm;
};


int k[DIM];
int t[DIM];
int n,i,r,x,y;
int s[DIM];
int rez[DIM];
nod *p[DIM],*q;


void parc(int x, int niv){
    nod *q;
    s[niv]=x;
    if (k[x]==0) {
        rez[x]=0;
    } else {
        rez[x]=rez[s[niv-k[x]]]+1;
    }
    q=p[x];
    while (q!=NULL) {
        parc(q->v, niv+1);
        q=q->urm;
    }
}


int main(){
    FILE *fin = fopen("cerere.in","r");
    fscanf(fin,"%d",&n);
    for (i=1;i<=n;i++)
        p[i]=NULL;
    for (i=1;i<=n;i++)
        fscanf(fin,"%d",&k[i]);
    for (i=1;i<n;i++){
        fscanf(fin,"%d %d",&x,&y);
        t[y]=x;
        q=new nod;
        q->v=y;
        q->urm=p[x];
        p[x]=q;
    }
    for (i=1;i<=n;i++)
        if (t[i]==0) {
            r=i;
            break;
        }
    parc(r,1);
    FILE *fout = fopen("cerere.out","w");
    for (i=1;i<=n;i++)
        fprintf(fout,"%d ",rez[i]);

    return 0;
}