Pagini recente » Cod sursa (job #240429) | Cod sursa (job #2007412) | Cod sursa (job #986869) | Cod sursa (job #1180262) | Cod sursa (job #2151666)
#include <cstdio>
#include <vector>
using namespace std;
vector <int> v[100001];
int k[100001],w[100001],p[100001],sol[100001],f[100001];
void dfs (int nod){
int i,vecin;
p[++p[0]]=nod;
w[nod]=p[p[0]-k[nod]];
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i];
dfs (vecin);
}
p[0]--;
}
int calcul (int nod){
if (sol[nod])
return sol[nod];
if (k[nod]==0){
sol[nod]=0;
return sol[nod];
}
sol[nod]=1+calcul(w[nod]);
return sol[nod];
}
int main()
{
FILE *fin=fopen ("cerere.in","r");
FILE *fout=fopen ("cerere.out","w");
int n,i,x,y;
long long rad;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++)
fscanf (fin,"%d",&k[i]);
rad=(long long)n*(n+1)/2;
for (i=1;i<=n-1;i++){
fscanf (fin,"%d%d",&x,&y);
v[x].push_back(y);
rad-=y;
}
dfs (rad);
for (i=1;i<=n;i++)
fprintf (fout,"%d ",calcul (i));
return 0;
}