Pagini recente » Cod sursa (job #2240661) | Cod sursa (job #933301) | Cod sursa (job #554679) | Cod sursa (job #1752521) | Cod sursa (job #2847152)
#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];
int arb[NMAX + 2];
void dfs (int nod, int lvl) {
viz[nod] = 1;
arb[lvl] = nod;
dp[nod] = dp[arb[lvl - k[nod]]] + 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;
}