Pagini recente » Cod sursa (job #1893967) | Cod sursa (job #254640) | Cod sursa (job #115401) | Cod sursa (job #1715162) | Cod sursa (job #132406)
Cod sursa(job #132406)
#include<stdio.h>
struct Nod {
int info;
Nod *urm;
};
int t,i,n,j,x,y;
Nod *st[100002],*fin[100002],*q,*del;
int tplgc[100002],d[100002],f[100002],viz[100002],tm,sir[100002],nr,max;
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]->info==0) {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--)
{
for(q=st[tplgc[j]];q!=NULL;q=q->urm)
{
if (max<sir[q->info])
{
max=sir[q->info];
nr=0;
}
if (max==sir[q->info]) nr++;
}
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;
}