Pagini recente » Cod sursa (job #2364848) | Cod sursa (job #1533558) | Cod sursa (job #1646215) | Cod sursa (job #2065211) | Cod sursa (job #596337)
Cod sursa(job #596337)
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 100005
#define pb push_back
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
vector< int > A[NMAX];
int NrMaimute[NMAX], D[NMAX], i, N, Tata, Fiu, Stramos[NMAX];
bool AreTata[NMAX];
inline void DF( int Nod, int Nivel )
{
Stramos[Nivel] = Nod;
( NrMaimute[Nod] ) ? D[Nod] = D[ Stramos[ Nivel - NrMaimute[Nod] ] ] + 1 : D[Nod] = 0;
for( vector< int >::iterator F = A[Nod].begin(); F != A[Nod].end(); F++ )
DF( *F, Nivel+1 );
}
int main()
{
in >> N;
for( i = 1; i <= N; i++ )
in >> NrMaimute[i];
memset( AreTata, false, sizeof(AreTata) );
for( i = 1; i < N; i++ )
{
in >> Tata >> Fiu;
AreTata[Fiu] = true;
A[Tata].pb( Fiu );
}
for( i = 1; AreTata[i]; i++ );
DF( i, 1 );
for( i = 1; i <= N; i++ )
out << D[i] << ' ';
out << '\n';
return 0;
}