Pagini recente » Cod sursa (job #2891914) | Cod sursa (job #1809067) | Cod sursa (job #2743324) | Cod sursa (job #1199875) | Cod sursa (job #2137377)
#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], rad, T[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);
T[y] = x;
}
for (int i = 1; i <= n; ++ i) {
if (T[i] == 0) {
rad = i;
break;
}
}
dfs (rad);
for (int i = 1; i <= n; ++ i) {
fout << G[i] << " ";
}
return 0;
}