Pagini recente » Cod sursa (job #1817069) | Cod sursa (job #2471683) | Cod sursa (job #2073450) | Cod sursa (job #2458128) | Cod sursa (job #1082989)
#include <vector>
#include <fstream>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
int d[100001],s[100001],u[100001],b[100001],g[100001],n,cnt;
vector<int>v[100001];
void df(int nod) {
u[nod]=1;
b[++cnt]=nod;
if (!d[nod])
s[nod]=0;
else
s[nod]=s[b[cnt-d[nod]]]+1;
for (int i=0;i<v[nod].size();++i)
if (!u[v[nod][i]])
df(v[nod][i]);
--cnt;
}
int main() {
int x, y;
fi>>n;
for (int i=1;i<=n;++i)
fi>>d[i];
for (int i=1;i<n;++i) {
fi>>x>>y;
v[x].push_back(y);
++g[y];
}
for (int i=1;i<=n;++i)
if(!g[i])
df(1);
for (int i=1;i<n;++i)
fo<<s[i]<<' ';
fo<<s[n];
return 0;
}