Pagini recente » Cod sursa (job #2794824) | Cod sursa (job #2620760) | Cod sursa (job #349705) | Cod sursa (job #3152744) | Cod sursa (job #865783)
Cod sursa(job #865783)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
const int NMAX = 100002, logMax = 18;
int N, K[NMAX];
int C[NMAX];
vector<int> G[NMAX];
int st[NMAX], numV[NMAX];
int main()
{
cin>>N;
for(int i = 1;i <= N;i++) {
cin>>K[i];
}
int root = 0;
for(int i = 1;i < N;i++) {
int A, B;
cin>>A>>B;
G[A].push_back(B);
root ^= B;
root ^= i;
}
root ^= N;
st[++st[0]] = root;
while(st[0] > 0) {
int v = st[st[0]];
if(numV[v] == (int)G[v].size()) {
st[0]--;
} else {
int w = G[v][numV[v]++];
numV[v]++;
if(K[w] > 0) {
C[w] = C[st[st[0] - K[w]]] + 1;
}
}
}
for(int i = 1;i <= N;i++) {
cout<<C[i]<<" ";
}
return 0;
}