Pagini recente » Cod sursa (job #103712) | Cod sursa (job #994420) | Cod sursa (job #2751418) | Cod sursa (job #1076890) | Cod sursa (job #176724)
Cod sursa(job #176724)
#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;
}