Pagini recente » Cod sursa (job #3226095) | Cod sursa (job #17466) | Cod sursa (job #852076) | Regulament, preONI 2006 | Cod sursa (job #353447)
Cod sursa(job #353447)
#include<cstdio>
#include<vector>
using namespace std;
const int N=1<<17;
vector <int> f[N];
int n,q[N],v[N],t[N],k=0;
bool felix_radacinosu[N];
void read()
{
int x,y;
scanf("%d",&n);
for( int i=1 ; i<=n ; ++i )
scanf("%d",&q[i]);
for( int i=1 ; i<n ; ++i )
{
scanf("%d%d",&x,&y);
felix_radacinosu[y]=1;
f[x].push_back(y);
}
}
void dfs(int x)
{
v[++k]=x;
if(q[x])
t[x]=t[v[k-q[x]]]+1;
for( int i=0 ; i<f[x].size() ; ++i )
dfs(f[x][i]);
--k;
}
void print()
{
for( int i=1 ; i<=n ; ++i )
printf("%d ",t[i]);
}
int radacina()
{
int i;
for( i=1 ; i<=n && felix_radacinosu[i]==1 ; ++i );
return i;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
read();
dfs(radacina());
print();
return 0;
}