Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #561908) | Borderou de evaluare (job #3364858) | Borderou de evaluare (job #3365315) | Cod sursa (job #3364858)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int nmax=100005;
int n,k[nmax],t[nmax],d[nmax],sol[nmax];
vector<int> g[nmax];
void dfs(int nod,int niv)
{
d[niv]=nod;
if(k[nod]) sol[nod]=sol[d[niv-k[nod]]]+1;
for(int nxt:g[nod])
dfs(nxt,niv+1);
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=1;i<n;i++)
{
int x,y;
fin>>x>>y;
g[x].push_back(y);
t[y]=x;
}
int root=1;
while(t[root]) root++;
dfs(root,1);
for(int i=1;i<=n;i++)
fout<<sol[i]<<' ';
}