Pagini recente » Cod sursa (job #2140782) | Cod sursa (job #2853736) | Cod sursa (job #2543092) | Cod sursa (job #1427053) | Cod sursa (job #1538144)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
#define Nmax 100002
ifstream fin ( "cerere.in" );
ofstream fout ( "cerere.out" );
int Query[Nmax], Tata[Nmax], Sol[Nmax], Stiva[Nmax];
vector < int > Arb[Nmax];
int ind = 0;
void DFS ( int nod ){
Stiva[++ind] = nod;
if ( Query[nod] != 0 )
Sol[nod] = Sol[Stiva[ind-Query[nod]]] + 1;
vector < int > :: iterator it;
for ( it = Arb[nod].begin(); it != Arb[nod].end(); ++it )
DFS ( *it );
ind--;
}
string Buffer;
string :: iterator it;
int ReadInt(){
int nr = 0;
while ( *it < '0' || *it > '9' )
it++;
while ( *it >= '0' && *it <= '9' ){
nr = nr * 10 + ( *it-'0' );
it++;
}
return nr;
}
int main(){
int N, x, y;
getline ( fin, Buffer, (char)0 );
it = Buffer.begin();
N = ReadInt();
for ( int i = 1; i <= N; ++i )
Query[i] = ReadInt();
for ( int i = 1; i < N; ++i ){
x = ReadInt();
y = ReadInt();
Tata[y] = x;
Arb[x].push_back(y);
}
int rad;
for ( int i = 1; i <= N; ++i ){
if ( Tata[i] == 0 ){
rad = i;
break;
}
}
DFS( rad );
for ( int i = 1; i <= N; ++i )
fout << Sol[i] << " ";
return 0;
}