Cod sursa(job #285881)

Utilizator lolopolololopolo lolopolo Data 23 martie 2009 09:11:29
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<string.h>
using namespace std;

typedef struct nod{int val;
        nod* urm;}*NOD;

char viz[100002];
NOD a[100002];
int v[100005],sol[100002],nr[100002],i,j,k,l,m,n,p,q;
void add(int x,int val){
NOD p=new nod;
p->val=val;
p->urm=a[x];
a[x]=p;
}

void df(int x,int lvl){
v[lvl]=x;
if(nr[x]&&sol[v[lvl-nr[x]]]+1<sol[x])
        sol[x]=sol[v[lvl-nr[x]]]+1;
else
if(!nr[x])sol[x]=0;
for(NOD p=a[x];p;p=p->urm)
        df(p->val,lvl+1);
        


}
int main(){

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

scanf("%d",&n);

for(i=1;i<=n;i++)
        {scanf("%d",&nr[i]);
        sol[i]=100002;}
for(i=1;i<n;i++)
        {scanf("%d %d",&p,&q);
        add(p,q);
        viz[q]=1;
        }

i=1;
for(i=1;i<=n;i++)
        {i=i;
        if(viz[i]==0)
                df(i,1);  }

for(i=1;i<=n;i++)
        printf("%d ",sol[i]);

return 0;}