Pagini recente » Cod sursa (job #344700) | Cod sursa (job #154336) | Cod sursa (job #343111) | Cod sursa (job #2643055) | Cod sursa (job #2551463)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
#define N 100005
vector < int > L[N];
int sol[N],st[N],str[N],par[N];
int n;
void Read()
{
int i,x,y;
cin>>n;
for(i=1; i<=n; i++)
cin>>str[i];
for(i=1; i<n; i++)
{
cin>>x>>y;
L[x].push_back(y);
}
}
void Solve()
{
int i,cnt=0,top,stramos;
st[++cnt]=1;
sol[1]=0;
while(cnt!=0)
{
top=st[cnt];
if(par[top]<L[top].size())
{
st[++cnt]=L[top][par[top]];
par[top]++;
top=st[cnt];
stramos=st[cnt-str[st[cnt]]];
if(str[top]==0) sol[top]=0;
else sol[top]=sol[stramos]+1;
}
else
cnt--;
cout<<top<<endl;
}
for(i=1;i<=n;i++)
cout<<sol[i]<<" ";
}
int main()
{
Read();
Solve();
return 0;
}