Pagini recente » Cod sursa (job #569305) | Cod sursa (job #1193293) | Cod sursa (job #192606) | Cod sursa (job #26008) | Cod sursa (job #3254561)
#include <bits/stdc++.h>
using namespace std;
int n;
int pasi[100005], stramosi[100005], ans[100005];
bool rad[100005];
vector <int> v[100005];
void dfs(int x, int adnc)
{
stramosi[adnc]=x;
for(int y:v[x]){
if(pasi[y]==0){
ans[y]=0;
dfs(y, adnc+1);
}
else{
ans[y]=ans[stramosi[adnc-pasi[y]+1]]+1;
dfs(y, adnc+1);
}
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> pasi[i];
}
for(int i = 1; i <= n-1; ++i){
int parinte, fiu;
cin >> parinte >> fiu;
rad[fiu] = true;
v[parinte].push_back(fiu);
}
for(int i = 1; i <= n; ++i){
if(!rad[i]){
ans[i] = 0;
stramosi[0]=i;
dfs(i, 0);
}
}
for(int i = 1; i <= n; ++i){
cout << ans[i] << " ";
}
return 0;
}