Pagini recente » Cod sursa (job #470077) | Cod sursa (job #2329583) | Cod sursa (job #719534) | Cod sursa (job #2515906) | Cod sursa (job #123281)
Cod sursa(job #123281)
#include <stdio.h>
#define maxm 100001
int n,m,i,t,min;
int x[maxm],y[maxm],v[maxm],aa[maxm],fol[maxm];
int a[maxm];
int g[2*maxm];
void inter(int p, int q)
{
int r=(p+q)/2,x,y,k=0;
x=p;
y=r+1;
while (x<=r && y<=q)
{
k++;
if (a[x]<a[y])
{
aa[k]=a[x];
x++;
}
else
{
aa[k]=a[y];
y++;
}
}
while (x<=r)
{
k++;
aa[k]=a[x];
x++;
}
while (y<=r)
{
k++;
aa[k]=a[y];
y++;
}
int i;k=0;
for (i=p; i<=q; i++)
{
k++;
a[i]=aa[k];
}
}
void merge(int p, int q)
{
int r=(p+q)/2;
if (p==q) return;
merge(p,r);
merge(r+1,q);
inter(p,q);
if (q<=p+1) return;
}
int df(int k)
{
int i,p,q;
for (i=g[k]; i<=g[k+1]-1; i++)
if (fol[a[i]]==0)
{
fol[a[i]]=1;
v[i]=df(a[i]);
fol[a[i]]=0;
}
p=0;q=0;
for (i=g[k+1]-1; i>=g[k]; i--)
if (fol[a[i]]==0)
{
p++;
if (v[i]+p>q) q=v[i]+p;
}
return q;
}
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d",&n);
for (t=1; t<=n; t++)
{
scanf("%d",&m);
for (i=1; i<=m+1; i++)
{
g[i]=0;
a[i]=0;
}
for (i=1;i<=m-1;i++)
{
scanf("%d %d ",&x[i],&y[i]);
g[x[i]]++;
g[y[i]]++;
}
for (i=2;i<=m+1;i++) g[i] += g[i-1];
for (i=1;i<=m-1;i++)
{
a[g[x[i]]]= y[i];
g[x[i]]--;
a[g[y[i]]] = x[i];
g[y[i]]--;
}
for (i=1;i<=m+1;i++) g[i]++;
if (m!=1)
for (i=1; i<=m; i++)
{
merge(g[i],g[i+1]-1);
fol[i]=0;
}
fol[1]=1;
printf("%d\n",df(1));
}
return 0;
}