Pagini recente » Cod sursa (job #2387633) | Cod sursa (job #1301453) | Cod sursa (job #1212357) | Cod sursa (job #2713752) | Cod sursa (job #2981592)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX = 1e5+5;
int n,rad;
int stramos[NMAX],t[NMAX],drum[NMAX],sol[NMAX];
vector<int>g[NMAX];
void read(){
fin>>n;
for(int i=1;i<=n;++i)
fin>>stramos[i];
for(int i=1;i<=n-1;++i){
int x,y;
fin>>x>>y;
g[x].push_back(y);
t[y]=x;
}
}
void dfs(int x,int nivel){
drum[nivel]=x;
if(stramos[x]!=0)
sol[x]=1+sol[drum[nivel-stramos[x]]];
for(auto i:g[x])
dfs(i,nivel+1);
}
void solve(){
for(int i=1;i<=n;++i)
if(!t[i]){
rad=i;
break;
}
dfs(rad,0);
for(int i=1;i<=n;++i)
fout<<sol[i]<<" ";
}
int main(){
read();
solve();
return 0;
}