Cod sursa(job #159217)

Utilizator verdunSas Dragos verdun Data 14 martie 2008 00:00:55
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>
struct Nod  {
  int info;
  Nod *urm;
};
int t,i,n,j,x,y,mr;
Nod *st[100002],*q,*del;
int tplgc[100002],viz[100002],sir[100002],nr,max,frv[100002],k;
int insert(Nod *&k, int val)
{
  Nod *p = new Nod;
  p->info=val;
  p->urm=k;
  k=p;
}
int df(int s)
{
  Nod *i;
  viz[s]=1;
  for(i=st[s];i!=NULL;i=i->urm)
    if (!viz[i->info])
      df(i->info);
  tplgc[tplgc[0]--]=s;
  return 0;
}
int main()
{
  freopen("zvon.in","r",stdin);
  freopen("zvon.out","w",stdout);
  scanf("%ld",&t);
  for(i=1;i<=t;i++)
     {
      scanf("%ld",&n);
      tplgc[0]=n;
      for(j=1;j<n;j++)
       {
         scanf("%ld %ld",&x,&y);
         insert(st[x],y);
       }
       df(1);
     for(j=n;j>0;j--)
     {
     nr=0;
     max=0;
       for(q=st[tplgc[j]];q!=NULL;q=q->urm)
       {
        frv[sir[q->info]]++;
        nr++;
        if (max<sir[q->info]) max=sir[q->info];
       }
       for(k=max,mr=0;k>=0&&nr;k--)
        if (frv[k])
            {
            mr+=frv[k];
            if (sir[tplgc[j]]<k+mr) sir[tplgc[j]]=k+mr;
            nr-=frv[k];
            frv[k]=0;
            }
      }
      printf("%ld\n",sir[1]);
       for(j=1;j<=n;j++)
          {
          viz[j]=0;
          sir[j]=0;
          st[j]=NULL;
          }
     }
  return 0;
}