Pagini recente » Cod sursa (job #1651434) | Cod sursa (job #1886172) | Cod sursa (job #104306) | Cod sursa (job #2635205) | Cod sursa (job #2070231)
#include <fstream>
#include<vector>
using namespace std;
ifstream cin ("cerere.in");
ofstream cout ("cerere.out");
int n,p[100100],l[100100],st[100100],vf;
vector <int> arb[100100];
int sol[100100];
void read ()
{ int x,y;
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i];
for(int i=1;i<n;i++)
{
cin>>x>>y;
arb[x].push_back(y);
l[x]++;
}
}
void df ()
{
vf=1;
st[1]=1;
while(vf)
{
int nod=st[vf];
if(l[nod]==0) vf--;
else
{
l[nod]--;
st[++vf]=arb[nod][l[nod]];
sol[st[vf]]=sol[st[vf-p[st[vf]]]]+1;
if(p[st[vf]]==0) sol[st[vf]]=0;
}
}
}
void write ()
{
for(int i=1;i<=n;i++)
cout<<sol[i]<<" ";
}
int main()
{
read();
df();
write();
cin.close();
cout.close();
return 0;
}