Pagini recente » Cod sursa (job #2117511) | Cod sursa (job #3278635) | Cod sursa (job #2358601) | Cod sursa (job #2782140) | Cod sursa (job #863063)
Cod sursa(job #863063)
#include <fstream>
#include <vector>
using namespace std;
#define MAXN 100001
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n;
vector<int> G[MAXN];
int v[MAXN], t[MAXN], sol[MAXN], arb[MAXN];
void DFS( int nod, int niv );
int main()
{
int x, y;
fin >> n;
for( int i = 1; i <= n ; ++i )
fin >> v[i];
for( int i = 1; i < n; ++i )
{
fin >> x >> y;
t[y] = x;
G[x].push_back( y );
}
int root = 1;
while( t[root] != 0 )
root = t[root];
DFS( root, 1 );
for( int i = 1; i <= n; ++i )
fout << sol[i] - 1 << ' ';
fin.close();
fout.close();
return 0;
}
void DFS( int nod, int niv )
{
arb[niv] = nod;
if( v[nod] == 0 )
sol[nod] = 1;
else
sol[nod] = 1 + sol[arb[niv-v[nod]]];
for( vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++it )
DFS( *it, niv + 1 );
}