Pagini recente » Cod sursa (job #66047) | Cod sursa (job #2147876) | Cod sursa (job #2675141) | Cod sursa (job #539761) | Cod sursa (job #1053560)
#include <fstream>
#include <vector>
#define N 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector < int > v[N];
int n, k[N], sol[N], vf, x, y, st[N];
bool viz[N];
void dfs(int nod)
{
st[++vf]=nod;
if (k[nod])
sol[nod]=sol[st[vf-k[nod]]]+1;
for (int i=0; i<v[nod].size(); i++)
dfs(v[nod][i]);
vf--;
}
int main()
{
f>>n;
for (int i=1; i<=n; i++)
f>>k[i];
for (int i=1; i<n; i++)
{
f>>x>>y; viz[y]=1;
v[x].push_back(y);
}
for (int i=1; i<=n; i++)
if (viz[i]==0) dfs(i), i=n;
for (int i=1; i<=n; i++)
g<<sol[i]<<'\n';
return 0;
}