Cod sursa(job #267185)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 26 februarie 2009 20:58:44
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#define Nmax 101000
 long n,t[Nmax],vec[Nmax],nx[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-1;i++)
 {
	scanf("%ld %ld",&tat,&fiu);
	t[fiu]=tat;
	p=new elem;
	p->inf=fiu;
	p->urm=a[tat];
	a[tat]=p;
 }
 fclose(stdin);
}

void parcurg(long x,long niv)
{
 elem *p;
 vec[niv]=x;
 if(nx[x]!=0)
    nx[x]=nx[vec[niv-nx[x]]]+1;
 else
	nx[x]=0;

 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 ",nx[i]);
 }
 printf("\n");
 fclose(stdout);
}
int main()
{
long i;
citire();
parcurg(1,0);
afisare();
return 0;
}