Cod sursa(job #265320)

Utilizator diannaDiaconu Diana dianna Data 23 februarie 2009 19:42:24
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#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;
}