Pagini recente » Cod sursa (job #352724) | Cod sursa (job #2050836) | Cod sursa (job #2668638) | Cod sursa (job #2734420) | Cod sursa (job #129128)
Cod sursa(job #129128)
#include <stdio.h>
struct nod {long info; nod *next;};
FILE*f=fopen("zvon.in","r");
FILE*g=fopen("zvon.out","w");
nod *fii[110000],*nivel[110000];
long tmin[110000],niv[110000],copii[110000],n,i,j,t,max,v1,v2,k,nm,vl,valo,ct;
void heapsort(long n)
{
long i,j,k,aux;
for (i=1; i<=n; i++)
{
j=i;
while ((j >> 1!=0)&&(copii[j >> 1]>copii[j]))
{
aux=copii[j >> 1];
copii[j >> 1]=copii[j];
copii[j]=aux;
j=j >> 1;
}
}
i=n;
while (i>1)
{
aux=copii[1];
copii[1]=copii[i];
copii[i]=aux;
i--;
j=1;
while (j>0)
{
k=2*j;
if (k>i) break;
if ((k+1<=i)&&(copii[k+1]<copii[k])) k++;
if (copii[j]<=copii[k]) break;
aux=copii[j];
copii[j]=copii[k];
copii[k]=aux;
j=k;
}
}
}
void qin(nod*& first, long vl)
{
nod* p;
p=new nod;
p->info=vl;
p->next=first;
first=p;
}
void qout(nod*& first, long& vl)
{
nod* p;
vl=first->info;
p=first;
first=first->next;
delete(p);
}
void solv()
{
fscanf(f,"%ld",&n);
niv[1]=1; nm=1; qin(nivel[1],1);
for (i=1; i<=n-1; i++)
{
fscanf(f,"%ld %ld",&v1,&v2);
qin(fii[v1],v2);
niv[v2]=niv[v1]+1;
qin(nivel[niv[v2]],v2);
if (niv[v2]>nm) nm=niv[v2];
}
for (i=nm-1; i>=1; i--)
{
while (nivel[i]!=NULL)
{
qout(nivel[i],vl);
ct=0;
while (fii[vl]!=NULL)
{
qout(fii[vl],valo);
ct++;
copii[ct]=tmin[valo];
}
heapsort(ct);
max=0;
for (j=1; j<=ct; j++)
if (copii[j]+j>max) max=copii[j]+j;
tmin[vl]=max;
}
}
fprintf(g,"%ld\n",tmin[1]);
while (nivel[1]!=NULL) qout(nivel[1],vl);
while (nivel[nm]!=NULL) qout(nivel[nm],vl);
}
int main()
{
fscanf(f,"%ld",&t);
for (k=1; k<=t; k++)
solv();
return 0;
}