Pagini recente » Cod sursa (job #1247618) | Cod sursa (job #177005) | Cod sursa (job #1682413) | Cod sursa (job #1341467) | Cod sursa (job #265320)
Cod sursa(job #265320)
#include<fstream.h>
ifstream f("cerere.in");
ofstream g("cerere.out");
const long Nmax=100010;
struct elem
{
int inf;
elem *urm;
}*a[Nmax];
long n,t[Nmax],nv[Nmax],s[Nmax],viz[Nmax];
void citire()
{
long i;
long x,y;
f>>n;
for(i=1;i<=n;i++)
f>>t[i];
for(i=1;i<n;i++)
{
f>>x>>y;
elem *p=new elem;
p->inf=y;
p->urm=a[x];
a[x]=p;
}
}
void afisare()
{
for(long i=1;i<=n;i++)
g<<s[i]<<' ';
}
void sol(int niv)
{
long nr,q,x=nv[niv];
nr=0; q=x;
int k=t[x];
while(t[q]!=0)
{
niv-=k;
q=nv[niv];
nr++;
}
s[x]=nr;
}
void parcurg(int niv,int vf)
{
nv[niv]=vf;
viz[vf]=1;
sol(niv);
for(elem *p=a[vf];p;p=p->urm)
parcurg(niv+1,p->inf);
viz[vf]=0;
}
int main()
{
citire();
for(long i=1;i<=n;i++)
if(t[i]==0)
{
parcurg(0,1);
break;
}
afisare();
g.close();
return 0;
}