Pagini recente » Cod sursa (job #1529218) | Cod sursa (job #2845450) | Cod sursa (job #1786312) | Cod sursa (job #2349384) | Cod sursa (job #959831)
Cod sursa(job #959831)
#include <fstream>
#include <vector>
#define MAXN 100003
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int i, N, M, j, A, B, head, x;
int K[MAXN], st[MAXN], sol[MAXN];
vector <int> v[MAXN];
bool used[MAXN], t[MAXN];
void DFS(int nod) {
vector <int> :: iterator it, fin;
st[++head] = nod;
if (K[nod])
sol[nod] = sol[st[head - K[nod]]] + 1;
it = v[nod].begin(); fin = v[nod].end();
for (; it != fin; ++it)
DFS(*it);
--head;
}
int main() {
f >> N; M = N - 1;
for (i = 1; i <= N; ++i) f >> K[i];
while (M--) {
f >> A >> B;
v[A].push_back(B);
v[B].push_back(A);
t[B] = true;
}
for (i = 1; i <= N; ++i)
if (!t[i]) break;
DFS(i);
for (i = 1; i <= N; ++i)
g << sol[i] << ' ';
return 0;
}