Pagini recente » rar30 | Cod sursa (job #625240) | Cod sursa (job #1410423) | Cod sursa (job #259453) | Cod sursa (job #2347989)
#include <bits/stdc++.h>
#define MAXN 100005
int N, Ans[MAXN], Stramos[MAXN];
std::vector <int> ADC[MAXN];
inline void AddEdge(int X, int Y) {
ADC[X].push_back(Y);
ADC[Y].push_back(X);
}
int NStack, Stack[MAXN];
void DFS(int Vertex = 1, int Parent = 0) {
Stack[++NStack] = Vertex;
Ans[Vertex] = Ans[Stack[NStack-Stramos[Vertex]]] + 1;
for (auto Edge:ADC[Vertex])
if (Edge != Parent)
DFS(Edge, Vertex);
--NStack;
}
std::ifstream In ("cerere.in");
std::ofstream Out("cerere.out");
void Citire() {
In >> N;
for (int i=1; i<=N; ++i)
In >> Stramos[i];
for (int i=1, X, Y; i<N; ++i)
In >> X >> Y, AddEdge(X, Y);
}
void Rezolvare() {
DFS();
for (int i=1; i<=N; ++i, Out << ' ')
Out << --Ans[i];
}
int main()
{
Citire();
Rezolvare();
return 0;
}