Pagini recente » Cod sursa (job #3277195) | Cod sursa (job #2924481) | Cod sursa (job #898630) | Cod sursa (job #2826260) | Cod sursa (job #1409870)
#include<stdio.h>
#include<vector>
#define N 100000
std::vector<int> v[N];
int val[N],st[N],ans[N];
void back(int pos,int nr){
int i;
st[pos]=nr;
for(i=0;i<v[nr].size();i++){
if(val[v[nr][i]]<=0)
ans[v[nr][i]]=0;
else
ans[v[nr][i]]=ans[st[pos-val[v[nr][i]]+1]]+1;
back(pos+1,v[nr][i]);
}
}
int main(){
FILE *fin,*fout;
fin=fopen("cerere.in","r");
fout=fopen("cerere.out","w");
int n;
fscanf(fin,"%d",&n);
int i;
for(i=0;i<n;i++)
fscanf(fin,"%d",&val[i+1]);
int rad=n*(n+1)/2;
for(i=0;i<n-1;i++){
int a,b;
fscanf(fin,"%d%d",&a,&b);
rad-=b;
v[a].push_back(b);
}
back(1,rad);
for(i=0;i<n;i++)
fprintf(fout,"%d ",ans[i+1]);
return 0;
}