Pagini recente » Cod sursa (job #3196180) | Cod sursa (job #2640287) | Cod sursa (job #1485313) | Cod sursa (job #875576) | Cod sursa (job #80122)
Cod sursa(job #80122)
#include<stdio.h>
struct nod{
long int fiu;
nod *next;
};
long int n,i,str[100002],rez[100002],dad,son,rad[100002],stv[100002],ccc,u,sol[100002];
nod *prim[100002],*ultim[100002];
void punefiu(long int dd,long int ss);
int main()
{
FILE *f,*g;f=fopen("cerere.in","r");g=fopen("cerere.out","w");
fscanf(f,"%ld",&n);for(i=1;i<=n;i++){fscanf(f,"%ld",&str[i]);if(!str[i]) rez[i]=1;}
for(i=1;i<n;i++){fscanf(f,"%ld%ld",&dad,&son);rad[son]=1;punefiu(dad,son);}
for(i=1;i<=n;i++)if(!rad[i]){ stv[1]=i;break;};u=1;
while(u>=1)
{
ccc=stv[u];
if(!rez[ccc]){sol[ccc]=sol[stv[u-str[ccc]]]+1;rez[ccc]=1;}
if(prim[ccc])
{ u++;stv[u]=prim[ccc]->fiu;prim[ccc]=prim[ccc]->next;}
else
{ stv[u]=0;u--;}
}
for(i=1;i<=n;i++)
fprintf(g,"%ld ",sol[i]);
fprintf(g,"\n");
fcloseall();
return 0;
}
void punefiu(long int dd,long int ss)
{
nod *pp;
if(!prim[dd])
{ prim[dd]=new nod;
prim[dd]->fiu=ss;
prim[dd]->next=0;
ultim[dd]=prim[dd];
return;
}
pp=new nod;
pp->fiu=ss;
pp->next=0;
ultim[dd]->next=pp;
ultim[dd]=pp;
}