Cod sursa(job #1025500)

Utilizator acomAndrei Comaneci acom Data 10 noiembrie 2013 09:22:38
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100005
vector <int> a[NMAX];
int n,x,y,G[NMAX],A[NMAX],S[NMAX];
bool M[NMAX];
void dfs(int s, int niv)
{
    int i;
    A[niv]=s;
    if (!G[s]) S[s]=0;
    else S[s]=S[niv-G[s]]+1;
    for (i=0;i<a[s].size();++i)
        dfs(a[s][i],niv+1);
}
int main()
{
    int i;
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
        scanf("%d",&G[i]);
    for (i=1;i<n;++i)
    {
        scanf("%d%d",&x,&y);
        a[x].push_back(y);
        M[y]=true;
    }
    for (i=1,x=0;i<=n && !x;++i)
        if (!M[i]) x=i;
    dfs(x,1);
    for (i=1;i<=n;++i)
        printf("%d ",S[i]);
    printf("\n");
    return 0;
}