Cod sursa(job #105431)

Utilizator IeewIordache Bogdan Ieew Data 17 noiembrie 2007 17:15:57
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.53 kb
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
#define InFile "zvon.in"
#define OutFile "zvon.out"
int t;
long v[100005],a[100005],w[100005],l[100005],n;
struct stivamea
{
int e,t,r;//elem,timp,unde am ramas
}stiva[100005];

void rec()
{long k;
stiva[1].e=1;
stiva[1].t=1;
stiva[1].r=w[1]-1;
k=1;v[1]=1;
while(k>0)
{
if(stiva[k].r==w[stiva[k].e]+l[stiva[k].e]){k--;continue;}

		 stiva[k].r++;

       k++;
       stiva[k].e=a[stiva[k-1].r];
       v[stiva[k-1].r]=stiva[k].t=stiva[k-1].t+1;
       stiva[k].r=w[stiva[k].e];
}
}
int sortf(const void*a, const void*b)
{
long *x,*y;
x=(long*)a;
y=(long*)b;
return l[*x]<l[*y];
}

int main()
{int ww;
long j,x,y,i,max=0;
f=fopen("zvon.in","r");
g=fopen("zvon.out","w");
fscanf(f,"%d",&t);

for(ww=1;ww<=t;ww++)
{
	fscanf(f,"%ld",&n);
   if(n==1){fprintf(g,"%d%s",0,"\n");continue;}
	for(j=1;j<=n;j++)v[j]=a[j]=w[j]=l[j]=0;
	w[0]=1;
	for(j=1;j<n;j++)
	{
		fscanf(f,"%ld%ld",&x,&y);
		if(!w[x])w[x]=w[max]+l[max];
      if(x>max)max=x;
		l[x]++;
		a[w[x]+l[x]-1]=y;
	}
//	for(i=1;i<=n;i++)cout<<a[i]<<' ';cout<<'\n';cout<<'\n'<<'\n';
//	for(i=1;i<=n;i++)cout<<i<<' '<<w[i]<<' '<<l[i]<<'\n';
//	cout<<"\n\n\n\n\n";
	for(i=1;i<=n;i++)
		if(l[i])qsort(a+w[i],l[i],sizeof(a[0]),sortf);
//	for(i=1;i<=n;i++)cout<<a[i]<<' ';cout<<'\n';cout<<'\n'<<'\n';
//	for(i=1;i<=n;i++)cout<<i<<' '<<w[i]<<' '<<l[i]<<'\n';
   rec();
   max=v[1];
   for(i=1;i<=n;i++)
   	if(v[i]>max)max=v[i];
   fprintf(g,"%ld%s",max,"\n");
}
fclose(f);
fclose(g);
return 0;
}