Pagini recente » Cod sursa (job #2332082) | Cod sursa (job #1668439) | Cod sursa (job #1595310) | Cod sursa (job #2446115) | Cod sursa (job #472560)
Cod sursa(job #472560)
#include<stdio.h>
#include<vector>
using namespace std;
vector <int> v[100005];
int n,str[100005],st[100005];
int nr,cer[100005];
int viz[100005];
void dfs(int nod)
{
int i,vec,lim=v[nod].size();
if(str[nod])
cer[nod]=cer[st[nr-str[nod]+1]]+1;
st[++nr]=nod;
for(i=0;i<lim;i++)
{
vec=v[nod][i];
dfs(vec);
}
nr--;
}
int main ()
{
int i,a,b;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&str[i]);
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
viz[b]=1;
}
for(i=1;i<=n;i++)
if(!viz[i])
break;
dfs(i);
for(i=1;i<=n;i++)
printf("%d ",cer[i]);
printf("\n");
return 0;
}