Cod sursa(job #103931)

Utilizator ScrazyRobert Szasz Scrazy Data 15 noiembrie 2007 19:38:14
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.1 kb
#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; 
}