Pagini recente » Cod sursa (job #2141289) | Cod sursa (job #2334092) | Cod sursa (job #162433) | Borderou de evaluare (job #238045) | Cod sursa (job #103931)
Cod sursa(job #103931)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 100001
int t;
long n;
typedef struct _nod{int n; _nod *urm;} nod;
nod *a[NMAX];
long niv[NMAX], f[NMAX], sz=sizeof(nod), tata[NMAX];
int viz[NMAX];
long rad, max;
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
long i, x, y;
nod *p;
for (scanf("%d", &t); t; --t)
{
memset(viz,0,sizeof(viz));
memset(a,NULL,sizeof(a));
memset(niv,0,sizeof(niv));
memset(f,0,sizeof(f));
memset(tata,0,sizeof(tata));
scanf("%ld", &n);
for (i=1; i<=n-1; ++i)
{
scanf("%ld %ld", &x, &y);
p=(nod *)malloc(sz);
p->n=y;
p->urm=a[x];
a[x]=p;
++f[x];
tata[y]=x;
viz[y]=1;
}
for (i=1; i<=n && viz[i]; ++i);
rad=i;
long lo, hi;
lo=hi=1;
viz[1]=rad;
while (lo<=hi)
{
niv[viz[lo]]=1+niv[tata[viz[lo]]];
p=a[viz[lo]];
while (p)
{
viz[++hi]=p->n;
p=p->urm;
}
++lo;
}
max=0;
for (i=1; i<=n; ++i)
if (max<f[i]+niv[i]-1) max=f[i]+niv[i]-1;
printf("%ld\n", max);
}
fclose(stdin);
fclose(stdout);
return 0;
}