Pagini recente » Cod sursa (job #3364973) | Cod sursa (job #3364981) | Cod sursa (job #3364974) | Cod sursa (job #3364859) | Cod sursa (job #3364493)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
vector<int>ad[100005];
int v[100005],rez[100005],dr[100005];
bool nrad[100005];
void dfs(int x,int grad){
dr[grad]=x;
if(v[x]==0)
rez[x]=0;
else
rez[x]=rez[dr[grad-v[x]]]+1;
for(int i=0;i<ad[x].size();i++)
dfs(ad[x][i],grad+1);
}
int main()
{
int n,a,b,rad;
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
for(int i=1;i<n;i++){
cin>>a>>b;
ad[a].push_back(b);
nrad[b]=true;
}
for(int i=1;i<=n;i++)
if(nrad[i]==false){
rad=i;
break;
}
dfs(rad,0);
for(int i=1;i<=n;i++)
cout<<rez[i]<< " ";
return 0;
}