Pagini recente » Cod sursa (job #2985248) | Cod sursa (job #2362403) | Cod sursa (job #2575081) | Cod sursa (job #3160521) | Cod sursa (job #3032782)
#include <bits/stdc++.h>
//#define int long long
#define mod 1000000007
using namespace std;
ifstream fin ("cerere.in");
ofstream fout("cerere.out");
const int dim=100002;
int n,K[dim],sol[dim],lant[dim];
bool apare[dim];
vector<int> a[dim];
void dfs (int x,int tata,int niv)
{
lant[niv]=x;
if (K[x]!=0)
sol[x]=sol[lant[niv-K[x]]]+1;
else sol[x]=0;
for (auto y:a[x])
if (y!=tata)
{
dfs(y,x,niv+1);
}
}
int32_t main()
{
fin>>n;
for (int i=1;i<=n;i++)
fin>>K[i];
int x,y,rad=0;
for (int i=1;i<n;i++)
{
fin>>x>>y;
apare[y]=1;
a[x].push_back(y);
a[y].push_back(x);
}
for (int i=1;i<=n && rad==0;i++)
if (apare[i]==0)
rad=i;
K[rad]=0;
dfs(1,0,1);
for (int i=1;i<=n;i++)
fout<<sol[i]<<' ';
return 0;
}