Pagini recente » Cod sursa (job #174629) | Cod sursa (job #2061556) | Cod sursa (job #445631) | Cod sursa (job #205535) | Cod sursa (job #1245296)
#include <fstream>
#include <bitset>
#include <list>
#define DIM 100011
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n;
int K[DIM],sol[DIM],S[DIM];
list<int> L[DIM];
bitset<DIM> viz;
void dfs(int nod){
list<int>::iterator it;
viz[nod]=true;
S[++S[0]]=nod;
if(K[nod])
sol[nod]=1+sol[S[S[0]-K[nod]]];
for(it=L[nod].begin();it!=L[nod].end();it++){
if(!viz[*it])
dfs(*it);
}
S[0]--;
}
int main(void){
register int st,i,j,x,y;
f>>n;
for(i=1;i<=n;i++) f>>K[i];
for(i=1;i<n;i++)
f>>x>>y,L[x].push_back(y),viz[y]=1;
for(i=1;i<=n;i++) if(!viz[i]) st=i;
viz.reset();
dfs(st);
for(i=1;i<=n;i++)
g<<(K[i]==0?0:sol[i])<<" ";
f.close();
g.close();
return 0;
}