Pagini recente » Cod sursa (job #1092696) | Cod sursa (job #2627513) | Cod sursa (job #789203) | Cod sursa (job #2301782) | Cod sursa (job #1429921)
#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;
long long Sum = 0;
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);
Sum += B;
}
L = 1;
S[1] = (long long)N*(N+1)/2 - Sum;
DFS(S[1]);
for(i = 1; i <= N; i++)
out << Nr[i] - 1 << ' ';
return 0;
}