Pagini recente » Cod sursa (job #492638) | Cod sursa (job #2636860) | Cod sursa (job #747532) | Cod sursa (job #2517817) | Cod sursa (job #2313420)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int N, x, y, K[100003], lv[100003], tati[100003];
bool sel[100003];
vector<int> G[100003];
void df(int nod, int niv);
int main() {
f >> N;
for (int i = 1; i <= N; i++) f >> K[i];
for (int i = 1; i < N; i++)
f >> x >> y, G[x].push_back(y), sel[y] = true;
int root = 0;
for (int i = 1; i <= N; i++)
if (!sel[i]) { root = i; break; }
for (int i = 1; i <= N; i++) sel[i] = false;
df(root, 1);
for (int i = 1; i <= N; i++) g << tati[i] << " ";
return 0;
}
void df(int nod, int niv) {
sel[nod] = true, lv[niv] = nod;
if (K[nod]) tati[nod] = tati[lv[niv - K[nod]]] + 1;
for (auto i : G[nod])
if (!sel[i]) df(i, niv + 1);
}