Pagini recente » Cod sursa (job #396325) | Cod sursa (job #2342046) | Cod sursa (job #2171524) | Cod sursa (job #963809) | Cod sursa (job #1094009)
#include <fstream>
#include <vector>
const int NMAX = 100003;
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,k[NMAX],stiva[NMAX],x,y,top,rad,sol[NMAX],i,grad[NMAX];
vector <int> v[NMAX];
void parcurgere(int nod)
{
int i;
top++;
stiva[top]=nod;
sol[nod]=1+sol[stiva[top-k[nod]]];
for (i=0;i<v[nod].size();i++)
parcurgere(v[nod][i]);
top--;
}
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>k[i];
}
for (i=1;i<=n-1;i++)
{
f>>x>>y;
v[x].push_back(y);
grad[y]++;
}
for (i=1;i<=n;i++)
{
if (grad[i]==0)
{
rad=i;
break;
}
}
parcurgere(rad);
for (i=1;i<=n;i++)
{
g<<sol[i]-1<<" ";
}
f.close();
g.close();
return 0;
}