Pagini recente » Cod sursa (job #1621461) | Cod sursa (job #1262781) | Cod sursa (job #396274) | Cod sursa (job #665164) | Cod sursa (job #614609)
Cod sursa(job #614609)
#include <cstdio>
#include <vector>
using namespace std;
int cnt,d[100001],v[100001],q[100001];
vector <int> g[100001];
void dfs(int x)
{
vector <int>::iterator i;
++cnt;
q[cnt]=x;
if (v[x])
d[x]=d[q[cnt-v[x]]]+1;
else
d[x]=0;
for (i=g[x].begin();i!=g[x].end();++i)
dfs(*i);
q[cnt]=0;
--cnt;
}
int main()
{
int n,i,x,y,root;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d\n",&n);
root=n*(n+1)/2;
for (i=1;i<=n;++i)
scanf("%d ",&v[i]);
for (i=1;i<n;++i)
{
scanf("%d %d\n",&x,&y);
g[x].push_back(y);
root-=y;
}
dfs(root);
for (i=1;i<=n;++i)
printf("%d ",d[i]);
printf("\n");
return 0;
}