Cod sursa(job #176724)

Utilizator rethosPaicu Alexandru rethos Data 11 aprilie 2008 16:30:26
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <vector>
#include <string.h>
#include <algorithm>
#define NM 100001
using namespace std;
vector < int > v[NM];

int n,t,rez[NM],m;
struct ch{int nod;ch*urm;}*g[NM];
void del(int k)
{ch *p;
 while (g[k])
   {p=g[k];
    g[k]=g[k]->urm;
    delete p;
   }
}
void add(int x,int y)
{ch *p=new ch;
 p->nod=y;
 p->urm=g[x];
 g[x]=p;
}
bool cmp(int x,int y)
{return (x>y);
}
void calc(int k)
{ch *p;
 v[k].clear();
 int init=m;
 rez[k]=0;
 if (g[k]==NULL) return;
 for (p=g[k];p;p=p->urm)
    {calc(p->nod);
     v[k].push_back(rez[p->nod]);
    }
 sort(v[k].begin(),v[k].end(),cmp);
 int j=1;
 vector <int>::iterator i;
 for (i=v[k].begin();i!=v[k].end();i++,j++)
    if (*i+j>rez[k]) rez[k]=*i+j;
 m=init;
}
int main()
{freopen("zvon.in","r",stdin);
 freopen("zvon.out","w",stdout);
 scanf("%d",&t);
 int k,i,x,y;
 for (k=1;k<=t;k++)
    {scanf("%d",&n);
     for (i=1;i<=n;i++) del(i);
     for (i=1;i<n;i++)
        {scanf("%d %d",&x,&y);
         add(x,y);
        }
     calc(1);
     printf("%d\n",rez[1]);
    }
 return 0;
}