Pagini recente » Cod sursa (job #2893361) | Cod sursa (job #19965) | Cod sursa (job #524666) | Cod sursa (job #2130312) | Cod sursa (job #991594)
Cod sursa(job #991594)
#include <cstdio>
#include <vector>
#define SIZE 100001
using namespace std;
vector <int> v[SIZE];
int n, i, x, y, top, k[SIZE], g[SIZE], gr[SIZE], st[SIZE];
void DFS(int node)
{
st[++top]=node;
if(k[node])
g[node]=g[ st[top - k[node]] ] +1;
for(vector <int> :: iterator it=v[node].begin(); it!=v[node].end(); ++it)
DFS(*it);
--top;
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.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", &x, &y);
v[x].push_back(y);
++gr[y];
}
for(i=1; gr[i]; ++i);
DFS(i);
for(i=1; i<=n; ++i)
printf("%d ", g[i]);
printf("\n");
return 0;
}