Pagini recente » Cod sursa (job #2683035) | Cod sursa (job #2863619) | Cod sursa (job #1778) | Cod sursa (job #3226312) | Cod sursa (job #1726550)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
#define NMAX 100005
#define INFI 0x3f3f3f
vector < int > v[ NMAX ];
int cont;
int stiva[ NMAX ];
int dist[ NMAX ];
int gradStramos[ NMAX ];
int gradNod[ NMAX ];
void compute( int nod ){
stiva[ ++cont ] = nod;
int n, i, fiu, stramos;
stramos = stiva[ cont - gradStramos[ nod ] ];
if( gradStramos[ nod ] != 0 )
dist[ nod ] = dist[ stramos ] + 1;
for( i = 0; i < v[ nod ].size(); ++i ){
fiu = v[ nod ][ i ];
compute( fiu );
}
--cont;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n, m, i, j, s, t, d, x, y;
scanf("%d",&n);
for( i = 1; i <= n; ++i ) scanf("%d",&gradStramos[ i ]);
for( i = 1; i < n; ++i ){
scanf("%d%d",&x,&y);
v[ x ].push_back( y );
gradNod[ y ]++;
}
for( i = 1; i <= n; ++i ){
if( !gradNod[ i ] ){
compute( i );
i = n;
}
}
for( i = 1; i <= n; ++i )
printf("%d ",dist[ i ]);
return 0;
}