Pagini recente » Cod sursa (job #1377106) | Cod sursa (job #1664591) | Cod sursa (job #1187280) | Cod sursa (job #3253733) | Cod sursa (job #1147916)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
fstream f("cerere.in",ios::in);
fstream g("cerere.out",ios::out);
const long nmax=100005;
vector <long> a[nmax];
long p[nmax],b[nmax],st[nmax],i,n,x,y,nr;
int oldest[nmax],viz[nmax];
void read()
{
f>>n;
for (i=1;i<=n;i++) f>>p[i];
memset(oldest,1,sizeof(oldest));
for (i=1;i<n;i++)
{
f>>x>>y;
a[x].push_back(y);
oldest[y]=0;
}
}
void adancime(long nc)
{
st[++nr]=nc;
if (p[nc]==0) b[nc]=0;
else b[nc]=b[st[nr-p[nc]]]+1;
for (vector <long>::iterator it=a[nc].begin();it!=a[nc].end();++it)
if (!viz[*it]) adancime(*it);
st[nr--]=0;
}
void solve()
{
nr=0;
for (i=1;i<=n;i++) if (oldest[i]) {
adancime(i);
break;
}
for (i=1;i<=n;i++) g<<b[i]<<" ";
}
int main()
{
read();
solve();
f.close();g.close();
return 0;
}