Cod sursa(job #1087293)

Utilizator StanAndreiAndrei Stan StanAndrei Data 19 ianuarie 2014 10:51:17
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define NMAX 100005

using namespace std;

int T[NMAX],K[NMAX],NR,N;

void read()
{
    int i,a,b;
    scanf("%d\n",&N);
    for (i=1;i<=N;i++) scanf("%d ",&K[i]);

    for (i=1;i<N;i++)
    {
        scanf("%d %d\n",&a,&b);
        T[b]=a;
    }
}

void dfs(int p,int k,int kmax)
{
    if (k==kmax && K[p] && T[p])
        NR++,dfs(T[p],1,K[p]);
    if (k<kmax && T[p])
        dfs(T[p],k+1,kmax);
}

void solve()
{
    int i;
    for (i=1;i<=N;i++)
    {
        NR=0;
        if (K[i])
        {
            dfs(i,0,0);
            printf("%d\n",NR);
        }
        else printf("0\n");
    }
}

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

    read();
    solve();

    fclose(stdin);
    fclose(stdout);
    return 0;
}