Pagini recente » Cod sursa (job #1033157) | Cod sursa (job #1271348) | Cod sursa (job #908931) | Cod sursa (job #3178196) | Cod sursa (job #2786226)
#include<bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
#define M 100005
#define X ((++o==M)?f.read(B,M),o=0:0)
vector<int> G[M];
int n,d[M],s[M],D[M],S[M],t,o,i,a;
char B[M];
inline void R(int &x)
{
for(x=0;B[o]<'0'||B[o]>'9';X);
for(;B[o]>='0'&&B[o]<='9';X)
x=x*10+B[o]-'0';
}
inline void F(int k)
{
S[++t]=k;
if(s[k])
D[k]=D[S[t-s[k]]]+1;
for(auto j:G[k])
F(j);
--t;
}
int main()
{
R(n);
for(i=1;i<=n;++i)
R(s[i]);
for(i=1;i<n;++i)
R(a),R(t),G[a].push_back(t),d[t]=a;
for(i=1;d[i];++i)
for(t=0,F(i),i=1;i<=n;++i)
g<<D[i]<<' ';
return 0;
}