Pagini recente » Cod sursa (job #2218700) | Cod sursa (job #3135700) | Cod sursa (job #308024) | Cod sursa (job #1391373) | Cod sursa (job #1608602)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100000;
int t[NMAX+2];
vector <int> G[NMAX+2];
int d[NMAX+2];
int N, c[NMAX+2];
int st[NMAX+2], lv;
void DFS( int nod ) {
st[ ++lv ] = nod;
d[nod] = d[ st[ lv - c[nod] ] ] + 1;
if( c[nod] == 0 ) d[nod] = 0;
for( int i = 0; i < (int)G[nod].size(); ++i ) {
int x = G[nod][i];
if( !d[x] ) {
DFS( x );
}
}
st[ lv-- ] = 0;
}
int main()
{
in >> N;
for( int i = 1; i <= N; ++i ) in >> c[i];
for( int i = 1; i < N; ++i ) {
int x,y;
in >> x >> y;
t[y] = x;
G[x].push_back( y );
}
int radacina = 1;
while( t[radacina] ) ++radacina;
DFS( radacina );
for( int i = 1; i <= N; ++i ) out << d[i] << ' ';
return 0;
}