Cod sursa(job #341865)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 19 august 2009 19:33:03
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
#define N 100001
struct cereri{int s,t,c;}v[N];
int n,num;
void citire()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for (int i=1; i<=n; ++i)
		scanf("%d",&v[i].t);
	for (int i=1; i<n; ++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		v[y].s=x;
	}
	
}
void drum(int i)
{
	if (!v[i].t||!v[i].s)
		return ;
	int k=i;
	i=v[i].c;
	++num;
	drum(i);
	
}
void gasesc(int x)
{
	int i=x;
	for (int j=1; j<=v[x].t; ++j)
		i=v[i].s;
	v[x].c=i;
}
void maimute_inteligente()
{
	for(int i=1; i<=n; ++i)
		if (v[i].t)
			gasesc(i);
	for (int i=1; i<=n; ++i)
	{
		if (!v[i].t)
			printf("0 ");
		else
		{
			num=0;
			drum(i);
			printf("%d ",num);
		}
	}
}
void afis()
{
	for (int i=1; i<=n; ++i)
		printf("%d %d %d %d\n",i,v[i].s,v[i].t,v[i].c);
}
int main()
{
	citire();
	maimute_inteligente();
	//afis();
	return 0;
}