Pagini recente » Rating Trifu-Urzica Alexandru (alexx_trifu) | Cod sursa (job #1683387) | Cod sursa (job #104444) | Monitorul de evaluare | Cod sursa (job #190011)
Cod sursa(job #190011)
#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(rad,1);
FILE *g=fopen("cerere.out","w");
for(i=1;i<=n;i++)
fprintf(g,"%d ",cost[i]);
fclose(g);
return 0;
}