Cod sursa(job #132493)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 5 februarie 2008 22:31:13
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<stdio.h>
struct Nod  {
  int info;
  Nod *urm;
};
int t,i,n,j,x,y,mr;
Nod *st[100002],*fin[100002],*q,*del;
int tplgc[100002],d[100002],f[100002],viz[100002],tm,sir[100002],nr,max,frv[100002],k;
int free(Nod *&prim)
{
 Nod *p=prim,*q;
 while (p!=NULL)  {q=p;p=p->urm;delete q;}
 prim=NULL;
}
int insert(Nod *&ultim, int val)
{
  Nod *p= new Nod;
  p->info=val;
  ultim->urm=p;
  p->urm=NULL;
  ultim=p;
}
int df(int s)
{
  Nod *i;
  tm++;
  viz[s]=1;
  d[s]=tm;
  for(i=st[s];i!=NULL;i=i->urm)
    if (!viz[i->info])
      df(i->info);
  f[s]=tm;
  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);
         if (st[x]==NULL)
           {
           insert(st[x],y);
           fin[x]=st[x];
           }
            else insert(fin[x],y);
       }
       tm=0;
       df(1);
     max=0;
     nr=0;
     for(j=n;j>0;j--)
     {
     nr=0;
     max=0;
       for(q=st[tplgc[j]];q!=NULL;q=q->urm)
       {
        frv[sir[q->info]]=1;
        nr++;
        if (max<sir[q->info]) max=sir[q->info];
       }
       for(k=max,mr=1;k>0&&nr;k--)
        if (frv[k])
            {
            frv[k]=0;
            if (sir[j]<k+mr) sir[j]=k+mr;
            nr--;
            mr++;
            }
         free(st[tplgc[j]]);
         sir[j]=max+nr;
      }
      if (sir[1]==-1) sir[1]=0;
      printf("%ld\n",sir[1]);
       for(j=1;j<=n;j++)
          {
          viz[j]=0;
          st[j]=NULL;
          fin[j]=NULL;
          }
     }
  return 0;
}