Pagini recente » Cod sursa (job #1822604) | Cod sursa (job #1921011) | Cod sursa (job #2440272) | Cod sursa (job #2343847) | Cod sursa (job #342550)
Cod sursa(job #342550)
#include<stdio.h>
#include<vector>
#define nmax 100005
using namespace std;
int rad,niv,n;
int p[nmax];
int st[nmax];
int v[nmax];
int t[nmax];
vector<int> f[nmax];
void df(int x)
{
int i,lim=f[x].size();
st[niv]=x;
if(!v[x])
p[x]=0;
else
p[x]=p[st[niv-v[x]]]+1;
for(i=0;i<lim;i++)
{
niv++;
df(f[x][i]);
niv--;
}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
int i,l1,l2,x;
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=0;i<n-1;i++)
{
scanf("%d%d",&l1,&l2);
f[l1].push_back(l2);
t[l2]=l1;
}
for(i=1;i<=n;i++)
if(!t[i])
{
x=i;
break;
}
niv=1;
df(x);
for(i=1;i<=n;i++)
printf("%d ",p[i]);
return 0;
}