Cod sursa(job #308321)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 26 aprilie 2009 19:31:28
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
//cik era bula pe moarte , si ii zice moartea:"Da-te ba jos de pe mine!"
#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 citire()
{
    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;
}

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);
}

void afisare()
{
     for(int i=1;i<=n;i++)
        printf("%d ",sol[i]-1);
}

int main()
{
    citire();
    dfs(rad,1);
    afisare();
    return 0;
}