Pagini recente » Cod sursa (job #1634488) | Borderou de evaluare (job #555533) | Borderou de evaluare (job #879892) | Cod sursa (job #300256) | Cod sursa (job #323886)
Cod sursa(job #323886)
#include<cstdio>
#include <vector>
using namespace std;
struct nod {
int gr;
vector<int> fii;
};
int main()
{
int n,vf,i,j;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
vector<int> viz(n+1,0), p(n+1,0), s(n+1,0), k(n+1,0);
vector<nod> arb(n+1);
for (i=1;i<=n;i++)
{
scanf("%d", &k[i]);
arb[i].gr=0;
}
for (i=0;i<n-1;i++)
{
scanf("%d %d",&j,&vf);
arb[j].fii.push_back(vf);
arb[vf].gr++;
}
vf=0;
for (i=1;i<=n;i++)
if (arb[i].gr==0)
{
vf=i;
break;
}
s[1]=vf;
p[vf]=0;
vf=1;
while (vf>0)
{
i=s[vf];
j=0;
if (arb[i].fii.size()>0)
{
j=arb[i].fii.back();
arb[i].fii.pop_back();
}
if (j>0)
{
viz[j]=1;
vf++;
s[vf]=j;
if (k[j]==0)
p[j]=0;
else
p[j]=p[s[vf-k[j]]]+1;
}
else
vf--;
}
for (i=1;i<=n;i++)
printf("%d ",p[i]);
return 0;
}