Pagini recente » Cod sursa (job #208174) | Cod sursa (job #2298773) | Cod sursa (job #3239250) | Cod sursa (job #2348392) | Cod sursa (job #194143)
Cod sursa(job #194143)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int n, nr[100005], t, a[100005], zvon[100005], max;
typedef struct nod
{
int x;
nod *a;
} *pNod;
pNod v[100005];
int cmp(const void *x, const void *y)
{
int i = *(int *)x, j = *(int *)y;
return nr[a[j]] - nr[a[i]];
}
void add(pNod &p, int x)
{
pNod q;
q = new nod;
q -> x = x;
q -> a = p;
p = q;
}
void initializari()
{
int i;
for (i = 1; i <= n; i++) v[i] = NULL, nr[i] = zvon[i] = a[i] = 0;;
max = 0;
}
void DF(int nod)
{
pNod p;
nr[nod]++;
for (p = v[nod]; p != NULL; p = p -> a)
{
DF(p -> x);
nr[nod] += nr[p -> x];
}
}
void DF2(int nod, int niv)
{
pNod p;
int x = 0, ord[100005], i;
for (p = v[nod]; p != NULL; p = p -> a) a[++x] = p -> x, ord[x] = x;
qsort(ord, x + 1, sizeof(int), cmp);
for (i = 1; i <= x; i++)
{
zvon[a[i]] = zvon[nod] + ord[i];
if (max < zvon[a[i]]) max = zvon[a[i]];
}
for (i = 1; i <= x; i++) DF2(a[i], zvon[a[i]]);
}
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
int i, x, y;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
initializari();
for (i = 1; i < n; i++)
{
scanf("%d %d",&x,&y);
add(v[x],y);
}
DF(1);
DF2(1,0);
printf("%d\n",max);
}
return 0;
}