Cod sursa(job #277538)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 11 martie 2009 19:40:21
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#define maxn 100001

using namespace std;

struct nod {int inf; nod *urm;} *arb[maxn];

int tata[maxn],st[maxn],sol[maxn];
int n,rad,sir[maxn];

void baga(int x, int y)
{
    nod *q=new nod;
    q->inf=y;
    q->urm=arb[x];
    arb[x]=q;
}

void dfs(int x,int niv)
{
    st[niv]=x;
    sol[x]=sol[st[niv-sir[x]]]+1;
    for(nod *q=arb[x];q;q=q->urm)
        dfs(q->inf,niv+1);
}

int main()
{
    int x,y;
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&sir[i]);
    for(int i=1;i<n;i++)
    {
        scanf("%d%d",&x,&y);
        baga(x,y);
        tata[y]=x;
    }
    for(int i=1;i<n;i++)
        if(tata[i]==0)
            rad=i;
    dfs(rad,1);
    for(int i=1;i<=n;i++)
        printf("%d ",sol[i]-1);
    return 0;
}