Pagini recente » Cod sursa (job #3159692) | Cod sursa (job #2703193) | Cod sursa (job #999658) | Cod sursa (job #2276923) | Cod sursa (job #1217496)
#include<fstream>
#include<vector>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
const int max_n = 100005;
vector <int> a[max_n];
int stramos[max_n],sol[max_n],st[max_n];
int i,n,x,y,radacina;
bool tata[max_n];
void dfs(int nod, int k){
st[k]=nod;
if(stramos[nod]) sol[nod]=1+sol[st[k-stramos[nod]]];
unsigned int dim=a[nod].size();
for(unsigned int j=0;j<dim;j++) dfs(a[nod][j],k+1);
}
int main(){
fi>>n;
for(i=1;i<=n;i++){ fi>>stramos[i]; tata[i]=0; sol[i]=0; }
for(i=1;i<=n-1;i++){
fi>>x>>y;
a[x].push_back(y);
tata[y]=1;
}
for(i=1;i<=n;i++)
if(!tata[i]) radacina=i;
dfs(radacina,0);
for(i=1;i<=n;i++) fo<<sol[i]<<" ";
fi.close();
fo.close();
return 0;
}