Pagini recente » Cod sursa (job #1566279) | Cod sursa (job #1248976) | Cod sursa (job #1124507) | Cod sursa (job #444498) | Cod sursa (job #1077876)
#include<fstream>
#include<vector>
using namespace std;
int rad,k[100005],x,y,n,str[100005],st[100005],g[100005];
ifstream in("cerere.in"); ofstream out("cerere.out");
vector <int> l[100005];
void dfs(int nod){
st[++st[0]]=nod;
str[nod]=st[st[0]-k[nod]];
for(int i=0; i<l[nod].size();++i)
dfs(l[nod][i]); //in str[i] am stramosul in care mergem direct din i
--st[0];
}
int main(){
in>>n;
for(int i=1;i<=n;++i) in>>k[i];
for(int i=1;i<n;++i){
in>>x>>y;
g[y]++;
l[x].push_back(y);
}
for(int i=1;i<=n;++i) if(g[i]==0) {rad=i; break;}
dfs(rad);
for(int i=1;i<=n;++i){
int ans=0,nod=i;
while(k[nod]!=0) nod=str[nod],++ans;
out<<ans<<' ';
}
out<<'\n';
return 0;
}