Pagini recente » Cod sursa (job #2664386) | Cod sursa (job #2030908) | Cod sursa (job #1185241) | Cod sursa (job #1912417) | Cod sursa (job #1595404)
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n,v[nmax],tata[nmax],st[nmax],l=1,rez[nmax];
vector <int> ma[nmax];
void dfs(int x)
{
int i,cx,nr=0;
cx=l;
while(v[st[cx]]!=0)
{
cx=cx-v[st[cx]];
nr++;
}
rez[x]=nr;
l++;
for(i=0;i<ma[x].size();i++)
{
st[l]=ma[x][i];
dfs(ma[x][i]);
}
l--;
}
void citire()
{
int i,a,b;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<n;i++)
{
fin>>a>>b;
tata[b]=a;
ma[a].push_back(b);
}
for(i=1;i<=n;i++)
if(tata[i]==0)
{
st[1]=i;
dfs(i);
break;
}
}
void afisare()
{
int i;
for(i=1;i<=n;i++)
fout<<rez[i]<<' ';
}
int main()
{
citire();
afisare();
fout.close();
return 0;
}