Pagini recente » Cod sursa (job #1519737) | Cod sursa (job #2917084) | Cod sursa (job #3271818) | Cod sursa (job #1149032) | Cod sursa (job #123300)
Cod sursa(job #123300)
#include <cstdio>
#include <algorithm>
const int maxn = 100001;
FILE *in = fopen("zvon.in","r"), *out = fopen("zvon.out","w");
struct muchii
{
int x, y;
};
int t;
int n;
int *a[maxn];
muchii b[maxn];
int tmin[maxn];
int nr[maxn];
void readcase()
{
fscanf(in, "%d", &n);
for ( int i = 1; i <= n; ++i )
nr[i] = 0, tmin[i] = 0;
for ( int i = 1; i < n; ++i )
fscanf(in, "%d %d", &b[i].x, &b[i].y), ++nr[ b[i].x ];
for ( int i = 1; i <= n; ++i )
a[i] = new int[ nr[i] + 2 ], a[i][0] = 0;
for ( int i = 1; i < n; ++i )
a[ b[i].x ][ ++a[ b[i].x ][0] ] = b[i].y;
}
int cmp(const int &p, const int &q)
{
return p > q;
}
void df(int nod = 1)
{
// daca e frunza
if ( a[nod][0] == 0 )
{
a[nod] = 0;
return;
}
// altfel continua parcurgerea
for ( int i = 1, N = a[nod][0]; i <= N; ++i )
df(a[nod][i]);
// sorteaza fii descrescator dupa tmin
std::sort(a[nod] + 1, a[nod] + a[nod][0] + 1, cmp);
// calc tmin[nod]
int max = -1;
for ( int i = 1, N = a[nod][0]; i <= N; ++i )
if ( i + tmin[ a[nod][i] ] > max )
max = i + tmin[ a[nod][i] ];
tmin[nod] = max;
}
int main()
{
fscanf(in, "%d", &t);
while ( t-- )
{
readcase();
df();
fprintf(out, "%d\n", tmin[1]);
}
return 0;
}