Pagini recente » Cod sursa (job #2471421) | Cod sursa (job #171391) | Cod sursa (job #2476968) | Cod sursa (job #416766) | Cod sursa (job #123498)
Cod sursa(job #123498)
#include <stdio.h>
#define maxm 100001
int n,m,i,t,min;
int x[maxm],y[maxm],v[maxm];
int a[maxm];
int g[2*maxm];
void inter(int p, int q)
{
int r=(p+q)/2,t1,t2,k=0;
t1=p;
t2=r+1;
while (t1<=r && t2<=q)
{
k++;
if (v[t1]<v[t2])
{
x[k]=v[t1];
t1++;
}
else
{
x[k]=v[t2];
t2++;
}
}
while (t1<=r)
{
k++;
x[k]=v[t1];
t1++;
}
while (t2<=r)
{
k++;
x[k]=v[t2];
t2++;
}
int i;k=0;
for (i=p; i<=q; i++)
{
k++;
v[i]=x[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 (y[a[i]]==0)
{
y[a[i]]=1;
v[i]=df(a[i]);
y[a[i]]=0;
}
p=0;q=0;
merge(g[k],g[k+1]-1);
for (i=g[k+1]-1; i>=g[k]; i--)
if (y[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]++;
for (i=1; i<=m; i++)
{
y[i]=0;
v[i]=0;
}
y[1]=1;
if (m!=1) printf("%d\n",df(1));
else printf("0\n");
}
return 0;
}