Pagini recente » Cod sursa (job #377963) | Cod sursa (job #3168259) | Statistici Petrusel Gabriela Mariana (Gabriela-Mariana) | Cod sursa (job #1218337) | Cod sursa (job #3204067)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
int v[100001],n,in[100001] ,dp[100001];
vector<int> adj[100005];
long long euler[400005];
int dim = 0;
void dfs(int nod ,int p )
{
dim ++ ;
euler [dim] = nod ;
if (v[nod] == 0 )
{
dp[nod] = 0 ;
}
else
dp[nod] = 1 + dp[euler[dim - v[nod] ]];
for ( auto u : adj[nod] )
{
if ( u != p )
dfs(u,nod);
}
dim -- ;
}
int main()
{
cin >> n ;
for ( int i = 1; i <= n; i ++ )
cin >>v[i];
for( int i = 1; i < n ; i ++ )
{
int a, b;
cin >> a >> b;
in [b] ++ ;
adj[a].push_back(b);
adj[b].push_back(a);
}
int start = -1;
for ( int i = 1; i <= n ; i ++ )
{
if ( in[i] == 0)
{start = i;
break;}
}
dfs(start,0);
for ( int i = 1; i <= n ; i ++ )
cout << dp[i] << " ";
return 0;
}