Pagini recente » Cod sursa (job #1180087) | Cod sursa (job #725167) | Cod sursa (job #928014) | Cod sursa (job #1811911) | Cod sursa (job #2847111)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
const int NMAX = 1e5;
vector <int> g[NMAX + 2];
int k[NMAX + 2];
bool viz[NMAX + 2];
int dp[NMAX + 2];
bool viz2[NMAX + 2];
void dfs (int nod, int lvl) {
viz[nod] = 1;
dp[nod] = dp[lvl - k[nod] + 1] + 1;
for (int x : g[nod])
if (!viz[x])
dfs(x, 1 + lvl);
}
int main() {
int n, i, a, b;
fin >> n;
for (i = 1; i <= n; ++i)
fin >> k[i];
for (i = 1; i <= n; ++i) {
fin >> a >> b;
g[a].push_back(b);
viz2[b] = 1;
}
i = 1;
while (i <= n && viz2[i])
++i;
dfs(i, 0);
for (i = 1; i <= n; ++i)
fout << dp[i] - 1 << " ";
return 0;
}