Pagini recente » Cod sursa (job #1401807) | Cod sursa (job #2954644) | Cod sursa (job #867672) | Cod sursa (job #633702) | Cod sursa (job #132246)
Cod sursa(job #132246)
#include<stdio.h>
struct Nod {
int info;
Nod *urm;
};
int t,i,n,j,x,y;
Nod *st[100002],*fin[100002],*q;
int tplgc[100001],d[100001],f[100001],viz[100001],tm,sir[100001],nr,max;
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]->info==0) {insert(st[x],y);fin[x]=st[x];}
else insert(fin[x],y);
}
tm=0;
df(1);
max=-1;
nr=0;
for(j=n;j>0;j--)
{
for(q=st[tplgc[j]];q!=NULL;q=q->urm)
{
if (max<f[q->info]-d[q->info])
{
max=f[q->info]-d[q->info];
nr=0;
}
if (max==f[q->info]-d[q->info]) nr++;
}
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;
}