Pagini recente » Cod sursa (job #1846730) | Cod sursa (job #2568764) | Cod sursa (job #677019) | Cod sursa (job #2356827) | Cod sursa (job #446397)
Cod sursa(job #446397)
#include <cstdio>
#include <vector>
using namespace std;
#define file_in "cerere.in"
#define file_out "cerere.out"
#define nmax 101000
int n,m,v[nmax],st[nmax],k[nmax],rez[nmax],vf;
vector<int> G[nmax];
void citire()
{
int i,a,b;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (i=1;i<=n;++i)
scanf("%d", &k[i]);
for (i=1;i<n;++i)
{
scanf("%d %d", &a, &b);
G[a].push_back(b);
v[b]++;
}
}
void dfs(int nod)
{
st[++vf]=nod;
if (k[nod]==0)
rez[nod]=0;
else
rez[nod]=rez[st[vf-k[nod]]]+1;
vector<int> :: iterator it;
for (it=G[nod].begin();it!=G[nod].end();++it) dfs(*it);
vf--;
}
void solve()
{
int i;
memset(st,0,sizeof(st));
vf=0;
for (i=1;i<=n;++i)
if (v[i]==0)
dfs(i);
for (i=1;i<=n;++i)
printf("%d ", rez[i]);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}