Pagini recente » Cod sursa (job #701704) | Cod sursa (job #1870230) | Cod sursa (job #164177) | Cod sursa (job #835873) | Cod sursa (job #2626653)
#include <bits/stdc++.h>
using namespace std;
int n;
int v[100001], g[100001],viz[10001], g1[10001];
void citire() {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d",&n);
int i, j;
for(i = 1; i <= n ;i++) {
scanf("%d",&v[i]);
}
int x;
int y;
for(i=1;i<=n-1;i++) {
scanf("%d %d",&x,&y);
g[y] = x;
}
}
int nr;
int q;
void DFS(int x) {
int i;
viz[x] = 1;
g1[nr++] = x;
if( viz[g[x]] == 0 && nr <= q)
DFS(g[x]);
}
int r[100001];
int main()
{
citire();
int i , j;
int k1 , k2;
for(i=1;i<=n;i++) {
nr = 0;
for(j=1;j<=n;j++)
viz[j] = 0;
for(j=1;j<=n;j++)
g1[j] = 0;
q = v[i];
DFS(i);
if(v[i] == 0)
r[i] = 0;
else
{
r[i] = r[g1[nr-1]] + 1;
}
}
for(i=1;i<=n;i++)
cout << r[i] << " ";
return 0;
}