Pagini recente » Cod sursa (job #2195189) | Cod sursa (job #2784310) | Cod sursa (job #480128) | Cod sursa (job #1672482) | Cod sursa (job #2615458)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, vf;
int k[100005], ans[100005], tata[100005], st[100005];
int rmq[17][100005];
vector<int> v[100005];
void dfs(int x)
{
st[++vf] = x;
if(k[x] == 0)
ans[x] = 0;
else
ans[x] = ans[st[vf - k[x]]] + 1;
for(int i = 0; i < v[x].size(); i++)
dfs(v[x][i]);
vf--;
}
int main()
{
ios::sync_with_stdio(false);
int x, y;
fin>>n;
for(int i = 1; i <= n; ++i)
fin>>k[i];
for(int i = 1; i < n; ++i)
{
fin>>x>>y;
tata[y] = x;
v[x].push_back(y);
}
for(int i = 1; i <= n; ++i)
if(tata[i] == 0)
{
dfs(i);
break;
}
for(int i = 1; i <= n; ++i)
fout<<ans[i]<<' ';
fin.close();
fout.close();
return 0;
}