Pagini recente » Cod sursa (job #2438387) | Cod sursa (job #539685) | Cod sursa (job #1240073) | Cod sursa (job #1847062) | Cod sursa (job #2169909)
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define NMAX 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> mv[NMAX];
int cerere[NMAX];
int answer[NMAX];
int dist[NMAX];
queue <int> q;
int BFS(int x, int k){
int i,val,nr=0;
val=cerere[x];
q.push(x);
while(!q.empty()){
x=q.front();
q.pop();
if(nr==val){
k++;
nr=0;
val=cerere[x];
}
for(i=0;i<mv[x].size();i++){
q.push(mv[x][i]);
nr++;
}
}
return k;
}
int main(){
int n,i,x,y;
fin>>n;
for(i=1;i<=n;i++)
fin>>cerere[i];
for(i=1;i<n;i++){
fin>>x>>y;
mv[y].push_back(x);
}
for(i=1;i<=n;i++)
if(cerere[i])
answer[i]=BFS(i,0);
for(i=1;i<=n;i++)
fout<<answer[i]<<" ";
return 0;
}