Pagini recente » Cod sursa (job #418474) | Cod sursa (job #2659682) | Cod sursa (job #22481) | Cod sursa (job #1417666) | Cod sursa (job #107653)
Cod sursa(job #107653)
/* Ivan Nicolae - Bucuresti */
/* Infoarena - Zvon */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 101
#define _fin "zvon.in"
#define _fout "zvon.out"
struct node
{
int key;
node* next;
};
int i,n,m,j,TMIN[NMAX],TFMIN[NMAX],t;
node* A[NMAX],* Sf[NMAX];
void Insert(node*& R, node*& Sf, int x)
{
if (!R)
{
R=(node*)malloc(sizeof(node));
R->key=x;
R->next=0;
Sf=R;
}
else {
node* e=(node*)malloc(sizeof(node));
e->key=x;
e->next=0;
Sf->next=e;
Sf=e;
}
}
void Quick(int li, int ls)
{
int i=li,j=ls,x=TFMIN[(li+ls)>>1],y;
while (i<=j)
{
while (TFMIN[i]>x) i++;
while (TFMIN[j]<x) j--;
if (i<=j)
{
y=TFMIN[i]; TFMIN[i]=TFMIN[j]; TFMIN[j]=y;
i++;j--;
}
}
if (i<ls) Quick(i,ls);
if (li<j) Quick(li,j);
}
void DFS(int nod)
{
int i;
node* x=A[nod];
while (x)
{
DFS(x->key);
x=x->next;
}
x=A[nod];
TFMIN[0]=0;
while (x)
{
TFMIN[++TFMIN[0]]=TMIN[x->key];
x=x->next;
}
Quick(1,TFMIN[0]);
int max=0;
for (i=1;i<=TFMIN[0];i++)
if (i+TFMIN[i]>max)
max=i+TFMIN[i];
TMIN[nod]=max;
}
int main()
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
scanf("%d",&t);
for (;t>=1;t--)
{
scanf("%d",&n);
memset(A,NULL,sizeof(A));
memset(Sf,NULL,sizeof(Sf));
memset(TMIN,0,sizeof(TMIN));
memset(TFMIN,0,sizeof(TFMIN));
for (i=1;i<=n-1;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Insert(A[x],Sf[x],y);
}
DFS(1);
printf("%d\n",TMIN[1]);
}
fclose(stdin);
fclose(stdout);
return 0;
}