Cod sursa(job #475773)

Utilizator aladinaladin aladinn aladin Data 8 august 2010 14:27:54
Problema Cerere Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <cstdio>
#define N 100004
int c[N],v[N],sol[N],x[N],y[N],lc[N];

int main()
{
	int n,m=1,i,k=0,j;
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;++i) scanf("%d",&v[i]);
	for (i=1;i<n;++i) {scanf("%d %d",&x[i],&y[i]);k+=y[i];}
	k=(n+1)*n/2-k;
	c[1]=k;lc[1]=0;
	while (m>0)
	{
		k=c[m];
		for (++lc[k];lc[k]<n;++lc[k])
			if (x[lc[k]]==k)
			{
				++m;
				c[m]=y[lc[k]];
				lc[c[m]]=0;
				if (v[c[m]]>0) sol[c[m]]=sol[c[m-v[c[m]]]]+1;
				break;
			}
		if (lc[c[m]]==n) --m;
	}
	for (i=1;i<=n;++i)
		printf("%d ",sol[i]);
	return 0;}