Pagini recente » Cod sursa (job #297186) | Cod sursa (job #2331703) | Cod sursa (job #582999) | Cod sursa (job #80300) | Cod sursa (job #3239937)
#include <bits/stdc++.h>
#define VMAX 100
#define NMAX 100000
#define LOG 21
#define INF (int)(10e8)
#define MOD 1000000007
#define ll long long int
#define NIL 0
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int k[NMAX+1];
int dp[NMAX+1],d[NMAX+1];
int n;
vector<int> adj[NMAX+1];
int t[NMAX+1];
void dfs(int x,int h)
{
d[h]=x;
if(!k[x])
{
dp[x]=0;
}
else
{
dp[x] = dp[d[h-k[x]]] + 1;
}
for(int i : adj[x])
{
dfs(i,h+1);
}
}
int main()
{
fin >> n;
for(int i=1;i<=n;i++)
{
fin >> k[i];
}
for(int i=1;i<=n-1;i++)
{
int x,y;
fin >> x >> y;
adj[x].push_back(y);
t[y]=x;
}
int r=0;
for(int i=1;i<=n && !r;i++)
{
if(!t[i])
{
r=i;
}
}
dfs(r,0);
for(int i=1;i<=n;i++)
{
fout << dp[i] << " ";
}
}