Pagini recente » Cod sursa (job #753633) | Cod sursa (job #336315) | Cod sursa (job #22184) | Cod sursa (job #1700053) | Cod sursa (job #132493)
Cod sursa(job #132493)
#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;
}