Pagini recente » Cod sursa (job #3195069) | Cod sursa (job #2307274) | Cod sursa (job #2862083) | Cod sursa (job #2786399) | Cod sursa (job #2633980)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
void dfs ( int nod );
int n;
int x, y;
int k[100137];
vector < int > v[100137];
int ant[100137];
int sorin[100137];
int viz[100137];
int niv;
int main()
{
in >> n;
for ( register int i = 1 ; i <= n ; ++i )
in >> k[i];
for ( register int i = 2 ; i <= n ; ++i )
{
in >> x >> y;
v[x].push_back (y);
ant[y] = 1;
}
for ( register int i = 1 ; i <= n ; ++i )
if ( !ant[i] )
{
niv = 1;
dfs(i);
for ( register int i = 1 ; i <= n ; ++i )
out << sorin[i] << " ";
return 0;
}
return 0;
}
void dfs ( int nod )
{
if ( k[nod] )
sorin[nod] = sorin[ant[niv - k[nod]]] + 1;
ant[niv] = nod;
viz[nod] = 1;
for ( auto i : v[nod] )
if ( !viz[i] )
{
++niv;
dfs(i);
--niv;
}
}