Pagini recente » Cod sursa (job #530945) | Cod sursa (job #712289) | Cod sursa (job #1120988) | Cod sursa (job #671113) | Cod sursa (job #2137368)
#include <fstream>
#include <vector>
#define DEF 100010
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int n, K[DEF], S[DEF], top, G[DEF];
vector < int > L[DEF];
void dfs (int nod) {
if (K[nod] != 0) {
G[nod] = 1 + G[S[top - K[nod] + 1]];
}
S[++ top] = nod;
for (int i = 0; i < L[nod].size (); ++ i) {
dfs (L[nod][i]);
}
S[top --] = nod;
}
int main () {
fin >> n;
for (int i = 1; i <= n; ++ i) {
fin >> K[i];
}
for (int i = 1; i <= n; ++ i) {
int x, y;
fin >> x >> y;
L[x].push_back (y);
}
dfs (1);
for (int i = 1; i <= n; ++ i) {
fout << G[i] << " ";
}
return 0;
}