Pagini recente » Cod sursa (job #1146906) | Cod sursa (job #2354804) | Cod sursa (job #2480030) | Cod sursa (job #750454) | Cod sursa (job #854178)
Cod sursa(job #854178)
#include<stdio.h>
#include<vector>
using namespace std;
#define nmax 100005
long i, n, v[nmax], nr[nmax], st[nmax], sf, a, b, r;
vector <long> ma[nmax];
bool ff[nmax];
void citire()
{
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&v[i]);
for (i=1;i<=n-1;i++)
{
scanf("%ld %ld",&a,&b);
ma[a].push_back(b);
ff[b]=1;
}
for (i=1;i<=n;i++)
if (!ff[i])
r=i;
}
void dfs(long nod)
{
vector <long> ::iterator it;
for (it=ma[nod].begin();it!=ma[nod].end();it++)
{
st[++sf]=*it;
if (v[*it]>0)
nr[*it]=nr[st[sf-v[*it]]]+1;
dfs(*it);
sf--;
}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
citire();
st[++sf]=r;
dfs(r);
for (i=1;i<=n;i++)
printf("%ld ",nr[i]);
return 0;
}