Pagini recente » Cod sursa (job #1936906) | Cod sursa (job #2961111) | Cod sursa (job #423381) | Cod sursa (job #1300284) | Cod sursa (job #1191961)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("cerere.in");
ofstream os("cerere.out");
int N, x, y;
vector <int> V;
vector <vector<int> > G;
int Stack[100001];
int R[100001];
bool Vis[100001];
void Input();
void DF();
void Output();
int main()
{
Input();
DF();
Output();
is.close();
os.close();
}
void Input()
{
is >> N;
G.resize(N+1);
V.push_back(0);
for ( int i = 1; i <= N; ++i )
{
is >> x;
V.push_back(x);
}
for ( int i = 1; i <= N-1; ++i )
{
is >> x >> y;
G[x].push_back(y);
}
}
void DF()
{
int it(1);
Stack[it] = 1;
Vis[it] = true;
while ( it )
{
x = Stack[it];
if ( V[x] )
R[x] = 1 + R[Stack[it-V[x]]];
y = -1;
for ( int i = 0; i < G[x].size() ; ++i )
{
if ( Vis[G[x][i]] == false )
{
y = 1;
Stack[++it] = G[x][i];
Vis[G[x][i]] = true;
i = G[x].size();
}
}
if ( y == -1 )
it--;
}
}
void Output()
{
for ( int i = 1; i <= N; ++i )
os << R[i] << " ";
}