Pagini recente » Cod sursa (job #708431) | Cod sursa (job #1695263) | Cod sursa (job #1621906) | Cod sursa (job #2068330) | Cod sursa (job #285881)
Cod sursa(job #285881)
#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;}