Pagini recente » Cod sursa (job #1003303) | Cod sursa (job #318716) | Cod sursa (job #569378) | Cod sursa (job #52523) | Cod sursa (job #1429919)
#include <fstream>
#include <vector>
using namespace std;
#define inFile "cerere.in"
#define outFile "cerere.out"
#define MAX_N 100000
ifstream in(inFile);
ofstream out(outFile);
int Nr[MAX_N + 1];
int Anc[MAX_N + 1];
int K[MAX_N + 1];
int S[MAX_N + 1], L;
vector < int > adjNext[MAX_N];
void DFS(int Node) {
int i;
Anc[Node] = S[L - K[Node]];
Nr[Node] = Nr[Anc[Node]] + 1;
for(i = 0; i < adjNext[Node].size(); i++) {
S[++L] = adjNext[Node][i];
DFS(adjNext[Node][i]);
}
--L;
}
int main() {
int N, i, A, B, Node, nSon;
in >> N;
for(i = 1; i <= N; i++)
in >> K[i];
for(i = 1; i < N; i++) {
in >> A >> B;
adjNext[A].push_back(B);
}
L = 1;
S[1] = 1;
DFS(1);
for(i = 1; i <= N; i++)
out << Nr[i] - 1 << ' ';
return 0;
}