Pagini recente » Cod sursa (job #2336912) | Cod sursa (job #1758829) | Cod sursa (job #1758683) | Cod sursa (job #303868) | Cod sursa (job #2391560)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y,k[100001],r[100001],nr,s[100001];
vector<int> v[100001];
void dfs(int nod) {
s[++nr] = nod;;
for (int i = 0; i < v[nod].size(); ++i) if (r[v[nod][i]] == -1) {
x = v[nod][i];
if (!k[x]) r[x] = 0;
else r[x] = r[s[nr - k[x]+ 1]] + 1;
dfs(v[nod][i]);
}
s[nr--] = 0;
}
int main()
{
f >> n;
for (int i = 1; i <= n; ++i) r[i] = -1;
for (int i = 1; i <= n; ++i) f >> k[i];
for (int i = 1; i < n; ++i) {
f >> x >> y;
v[x].push_back(y);
}
for (int i = 1; i <= n; ++i) if (r[i] == -1 && !k[i]) {
r[i] = 0;
dfs(i);
}
for (int i = 1; i <= n; ++i) g << r[i] << ' ';
g << endl;
return 0;
}