Pagini recente » Cod sursa (job #1763930) | Cod sursa (job #2244989) | Cod sursa (job #2651346) | Cod sursa (job #2534841) | Cod sursa (job #1083253)
#include <stdio.h>
#include <vector>
#include <fstream>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
vector<int>e[100002];
int k[100002],g[100002],nr[100002],s[100002],x,y,i,n;
char v[100002];
void df(int x) {
v[x]=1;
s[++s[0]]=x;
if(k[x]!=0) nr[x]=1+nr[s[s[0]-k[x]]];
for(int i=0;i<(int)e[x].size();i++)
if(!v[e[x][i]]) df(e[x][i]);
s[0]--;
}
int main() {
fi>>n;
for(i=1;i<=n;i++) fi>>k[i];
for(i=1;i<n;i++) {
fi>>x>>y;
e[x].push_back(y);
g[y]++;
}
for(i=1;i<=n;i++)
if(g[i]==0) df(i);
for(i=1;i<=n;i++) fo<<nr[i]<<' ';
return 0;
}