Pagini recente » Cod sursa (job #2567661) | Cod sursa (job #3235261) | Cod sursa (job #2491226) | Cod sursa (job #188272) | Cod sursa (job #2663107)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> g[100005];
bool viz[100005];
bool f[100005];
vector<int> stiva;
int sol[100005];
int v[100005];
void dfs(int nod)
{
viz[nod]=1;
stiva.push_back(nod);
if(v[nod]==0)
sol[nod]=0;
else
sol[nod]=sol[stiva[stiva.size()-1-v[nod]]]+1;
for(int i=0; i<g[nod].size(); i++)
if(viz[g[nod][i]]==0)
dfs(g[nod][i]);
stiva.pop_back();
}
int main()
{ freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int n,i,x,y,j,poz;
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &v[i]);
for(i=1; i<n; i++){
scanf("%d%d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
f[y]=1;
}
for(i=1; i<=n && f[i]==1; i++);
poz=i;
dfs(poz);
for(i=1; i<=n; i++)
printf("%d ", sol[i]);
return 0;
}