Pagini recente » Cod sursa (job #3137714) | Cod sursa (job #53921) | Cod sursa (job #1729729) | Cod sursa (job #868814) | Cod sursa (job #105431)
Cod sursa(job #105431)
#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;
}