Cod sursa(job #2017604)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 1 septembrie 2017 19:52:51
Problema Cerere Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int nr,verif[100001],lista[100001],nod[100001],next[100001],v[100001],rez[100001],stiva[100001];
void add(int x,int y)
{
    nr++;
    next[nr]=lista[x];
    nod[nr]=y;
    lista[x]=nr;
}
int G()
{
    int nr=0;
    char c;
    c=getchar();
    while(!isdigit(c))
        c=getchar();
    while(isdigit(c))
    {
        nr=nr*10+c-'0';
        c=getchar();
    }
    return nr;
}
void dfs(int x,int p)
{
    int z;
    stiva[p]=x;
    rez[x]=rez[stiva[p-v[x]]]+(v[x]>0);
    z=lista[x];
    while(z)
    {
        dfs(nod[z],p+1);
        z=next[z];
    }
    stiva[p]=0;
}
int main()
{
    int i,n,x,y;
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    n=G();
    for(i=1; i<=n; i++)
        v[i]=G();
    for(i=1; i<n; i++)
    {
        x=G();
        y=G();
        verif[y]=1;
        add(x,y);
    }
    for(i=1; verif[i]==1; i++);
    dfs(i,1);
    for(i=1; i<=n; i++)
        printf("%d ",rez[i]);

    return 0;
}