Cod sursa(job #315967)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 17 mai 2009 19:43:33
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 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;   
}