Pagini recente » Cod sursa (job #520990) | Cod sursa (job #2955442) | Cod sursa (job #390767) | Cod sursa (job #1215199) | Cod sursa (job #1076560)
#include<fstream>
#include<vector>
using namespace std;
int rad,k[100005],t[100005],g[100005],rasp[100005],x,y,n;
ifstream in("cerere.in"); ofstream out("cerere.out");
vector <int> l[100005];
int maimuta(int nod, int cost){
if(nod==rad || k[nod]==0){ rasp[nod]=0; return cost;}
if(rasp[nod]!=0) return cost+1;
int crt=nod;
rasp[nod]=cost;
for(int i=1;i<=k[nod];++i) crt=t[crt];
return maimuta(crt,cost+1);
}
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]++;
t[y]=x;
l[x].push_back(y); l[y].push_back(x);
}
for(int i=1;i<=n;++i) if(g[i]==0) rad=i;
for(int i=1;i<=n;++i)
out<<maimuta(i,0)<<' ';
out<<'\n';
return 0;
}