Cod sursa(job #189170)

Utilizator pandaemonAndrei Popescu pandaemon Data 12 mai 2008 18:41:39
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>

#define NMAX 101001

struct lista { int val; lista *last; } *p[NMAX];

int t,n, d[NMAX],sub[NMAX];

int inline cmp(const void *a, const void *b)
{
  return ( *(int*)b - *(int*)a );
}


void init();
void go(int x);


int main()
{
  freopen("zvon.in","r",stdin);
  freopen("zvon.out","w",stdout);

  scanf("%d",&t);

  while(t--)
  {
    init();

    go(1);

    printf("%d\n",d[1]);
  }

  printf("\n"); return 0;

}



void init()
{
  scanf("%d",&n);

  int var1,var2,i;  lista *p2;

  memset(p,0,n+1);  memset(d,0,n+1);

  for(i=1; i<n; i++)
  {
    scanf("%d %d",&var1,&var2);

    p2=new lista;

    p2->last=p[var1];

    p2->val=var2;

    p[var1]=p2;
  }

}


void go(int x)
{

  lista *p2=p[x];

  while(p2!=NULL) { go(p2->val); p2=p2->last; }

  int k=0,max=0;  p2=p[x];

  while(p2!=NULL) { sub[++k]=d[p2->val];  p2=p2->last; }

  qsort(sub+1,k,sizeof(int),cmp);


  while(k) { sub[k]+=k; if(sub[k]>max) max=sub[k]; k--;}

  d[x]=max;

}