Pagini recente » Cod sursa (job #533924) | Cod sursa (job #667184) | Cod sursa (job #848743) | Cod sursa (job #1675233) | Cod sursa (job #854174)
Cod sursa(job #854174)
#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;
long x;
for (it=ma[nod].begin();it!=ma[nod].end();it++)
{
x=*it;
st[++sf]=x;
if (v[x]>0)
nr[x]=nr[st[sf-v[x]]]+1;
dfs(x);
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;
}