Cod sursa(job #267206)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 26 februarie 2009 21:51:27
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#define Nmax 101000
 long fin[Nmax],n,t[Nmax],vec[Nmax],nx[Nmax],aj[Nmax];
 struct elem
 {
 long inf;
 elem *urm;
 }*a[Nmax];

void citire()
{
 long i,tat,fiu;
 freopen("cerere.in","r",stdin);
 scanf("%ld",&n);
 for(i=1;i<=n;i++)
	scanf("%ld",&nx[i]);
 elem *p;
 for(i=1;i<=n;i++)
 {
	scanf("%ld %ld",&tat,&fiu);
	aj[fiu]=1;
	t[fiu]=tat;
	p=new elem;
	p->inf=fiu;
	p->urm=a[tat];
	a[tat]=p;
 }
 fclose(stdin);
}
long rezolv(long x)
{
 long cv=0;
 while(nx[vec[x]]!=0)
 {	x=x-nx[vec[x]];
	cv++;
 }
 return cv;
}

void parcurg(long x,long niv)
{
 elem *p;
 vec[niv]=x;
 fin[x]=rezolv(niv);

 for(p=a[x];p;p=p->urm)
		parcurg(p->inf,niv+1);
}

void afisare()
{
 freopen("cerere.out","w",stdout);
 long i;
 for(i=1;i<=n;i++)
 {
	printf("%ld ",fin[i]);
 }
 printf("\n");
 fclose(stdout);
}
int main()
{
long i;
citire();
for(i=1;i<=n;i++)
	if(aj[i]==0)
		parcurg(i,0);
afisare();
return 0;
}