Pagini recente » Cod sursa (job #424484) | Cod sursa (job #136053) | Cod sursa (job #602024) | Cod sursa (job #42356) | Cod sursa (job #190010)
Cod sursa(job #190010)
#include<stdio.h>
struct nod {int inf; nod *adr;} *a[101000];
int viz[101000],s[111000],cost[111000],i,j,rad,n,x,y,v[101000],r[101000];
void DF(int x,int niv){
nod *p;
viz[x]=1;
s[niv]=x;
p=a[x];
if(v[x]==0) cost[x]=0;
else cost[x]=cost[s[niv-v[x]]]+1;
for(;p!=NULL;p=p->adr){
if(!viz[p->inf])
DF(p->inf,niv+1);
}
}
int main(){
FILE *f=fopen("cerere.in","r");
fscanf(f,"%d ",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
for(i=1;i<=n-1;i++){
fscanf(f,"%d %d",&x,&y);
nod *p=new nod;
p->inf=y;
p->adr=a[x];
a[x]=p;
r[y]=1;
}
fclose(f);
for(i=1;i<=n;i++)
if(!r[i]){
rad=i;
break;
}
DF(1,1);
FILE *g=fopen("cerere.out","w");
for(i=1;i<=n;i++)
fprintf(g,"%d ",cost[i]);
fclose(g);
return 0;
}