Pagini recente » Cod sursa (job #157775) | Cod sursa (job #621940) | Cod sursa (job #2615936) | Cod sursa (job #1824854) | Cod sursa (job #1135243)
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define nmax 100005
using namespace std;
int n,i,j,k,stramos[nmax],sol[nmax],x,y,stiva[nmax],top;
bool tata[nmax];
vector<int>v[nmax];
void df(int x)
{
tata[x]=true;
stiva[++top]=x;
if (stramos[x]) sol[x]=sol[stiva[top-stramos[x]]]+1;
for (int j=0;j<v[x].size();j++)
df(v[x][j]);
--top;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&stramos[i]);
for (i=1;i<=n-1;i++)
{
scanf("%d %d",&x,&y);
tata[y]=true;
v[x].push_back(y);
}
for (i=1;i<=n;i++)
if (!tata[i])
df(i);
for (i=1;i<=n;i++)
printf("%d ",sol[i]);
return 0;
}