Pagini recente » Cod sursa (job #909398) | Cod sursa (job #2652482) | Cod sursa (job #3279113) | Cod sursa (job #2504160) | Cod sursa (job #1976308)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int nMax = 100005;
int n, a[nMax], ans[nMax], t[nMax];
vector <int> L[nMax], q;
inline void Read()
{
int i, x, y;
fin >> n;
for(i = 1; i <= n; i++)
fin >> a[i];
for(i = 1; i <= n - 1; i++)
{
fin >> x >> y;
L[x].push_back(y);
t[y] = x;
}
}
inline void Dfs(int nod)
{
if(a[nod])
ans[nod] = ans[q[q.size() - a[nod]]] + 1;
q.push_back(nod);
for(auto it : L[nod])
Dfs(it);
q.pop_back();
}
inline void Solve()
{
int i, rad;
for(i = 1; i <= n; i++)
if(!t[i])
{
rad = i;
break;
}
Dfs(rad);
for(i = 1; i <= n; i++)
fout << ans[i] << " ";
}
int main()
{
Read();
Solve();
return 0;
}