Pagini recente » Cod sursa (job #2639433) | Cod sursa (job #176256) | Cod sursa (job #2283722) | Cod sursa (job #2579162) | Cod sursa (job #854200)
Cod sursa(job #854200)
//90 tle
#include<stdio.h>
#include<vector>
using namespace std;
#define nmax 100005
long i, n, v[nmax], nr[nmax], st[nmax], sf, a, b, r, nod, x;
vector <long> ma[nmax];
vector <long> ::iterator it[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;
it[i]=ma[i].begin();
}
}
void rezolvare()
{
st[++sf]=r;
while (sf)
{
nod=st[sf];
if (it[nod]!=ma[nod].end())
{
x=*it[nod]; it[nod]++;
st[++sf]=x;
if (v[x]>0)
nr[x]=nr[st[sf-v[x]]]+1;
}
else
sf--;
}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
citire();
rezolvare();
for (i=1;i<=n;i++)
printf("%ld ",nr[i]);
return 0;
}