Pagini recente » Cod sursa (job #412224) | Clasament porc_again | Cod sursa (job #2495146) | Cod sursa (job #1244049) | Cod sursa (job #2201327)
#include <iostream>
#include <fstream>
#define MAX_NM 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, nr, vf[2 * MAX_NM], urm[2 * MAX_NM], lst[MAX_NM], v[MAX_NM], d[MAX_NM], a[MAX_NM], rez = MAX_NM, dv = 0;
bool viz[MAX_NM];
void adauga(int x, int y)
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void dfs(int x)
{
viz[x] = true;
int p = lst[x], y, c, cnt = 0;
d[++dv] = x;
c = dv;
if (v[x]) a[x] = a[d[dv - v[x]]] + 1;
while (p != 0) {
y = vf[p];
if (!viz[y]) dfs(y);
p = urm[p];
}
--dv;
}
int main()
{
int x, y;
fin >> n;
for (int i = 1 ; i <= n ; i++) fin >> v[i];
for (int i = 1 ; i < n ; i++) {
fin >> x >> y;
adauga(x, y);
}
for (int i = 1 ; i <= n ; i++) if (!viz[i]) dfs(i);
for (int i = 1 ; i <= n ; i++) fout << a[i] << ' ';
return 0;
}