Pagini recente » Cod sursa (job #172996) | Cod sursa (job #687214) | Cod sursa (job #2434074) | Cod sursa (job #12808) | Cod sursa (job #1068865)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
const int N = 1e5+5;
int n, t[N], s[N], d[N], c[N];
vector <int> g[N];
void dfs(int x, int lvl) {
s[lvl] = x;
if (c[x])
d[x] = d[s[lvl - c[x]]] + 1;
for (vector <int> :: iterator it = g[x].begin(); it != g[x].end(); ++it)
dfs(*it, lvl + 1);
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> c[i];
if (c[i])
d[i]++;
}
for (int i = 1; i < n; ++i) {
int x, y;
fin >> x >> y;
g[x].push_back (y);
t[y] = x;
}
int x = 1;
while (t[x])
x = t[x];
dfs(x, 0);
for (int i = 1; i <= n; ++i)
fout << d[i] << " ";
}