Pagini recente » Cod sursa (job #2052929) | Cod sursa (job #1618815) | Cod sursa (job #1756481) | Cod sursa (job #1927494) | Cod sursa (job #1429979)
#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 Index[MAX_N + 1];
int K[MAX_N + 1];
int S[MAX_N + 1], L;
vector < int > adjNext[MAX_N + 1];
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;
while(L) {
if(!Index[S[L]]) Nr[S[L]] = Nr[S[L - K[S[L]]]] + 1;
if(Index[S[L]] < adjNext[S[L]].size()) {
S[L+1] = adjNext[S[L]][Index[S[L]]];
Index[S[L]]++;
L++;
}
else --L;
}
for(i = 1; i <= N; i++)
out << Nr[i] - 1 << ' ';
return 0;
}