Pagini recente » Cod sursa (job #3173729) | Cod sursa (job #417705) | Cod sursa (job #3276054) | Cod sursa (job #1880094) | Cod sursa (job #103942)
Cod sursa(job #103942)
#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,db;
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;
db=0;
for (i=1; i<=n; ++i)
if (max<f[i]+niv[i]-1) max=f[i]+niv[i]-1;
else (max=f[i]+niv[i]-1 && max!=0) ++db;
printf("%ld\n", max+db);
}
fclose(stdin);
fclose(stdout);
return 0;
}