Pagini recente » Cod sursa (job #318610) | Cod sursa (job #2798249) | Cod sursa (job #2287106) | Cod sursa (job #1544748) | Cod sursa (job #107400)
Cod sursa(job #107400)
using namespace std;
#include <cstdio>
#include <string>
#include <cassert>
#include <vector>
#include <algorithm>
#define FIN "zvon.in"
#define FOUT "zvon.out"
#define NMAX 100001
#define INF 0x3f3f3f3f
#define pb push_back
vector <int> fi[NMAX];
int N, Nf[NMAX], s[NMAX], viz[NMAX];
void df (int nod)
{
int i, j;
s[nod] = 0;
for (i = 0; i < Nf[nod]; ++ i)
df (fi[nod][i]);
for (i = 0; i < Nf[nod]; ++ i)
viz[i] = s[fi[nod][i]];
sort (viz, viz + Nf[nod]);
for (j = Nf[nod] - 1; j >= 0; -- j)
if (s[nod] <= viz[j] + Nf[nod] - j)
s[nod] = viz[j] + Nf[nod] - j;
}
char sir[32];
void read ()
{
int T, i, x, y, l, j, ct;
scanf ("%d\n", &T);
while (T--)
{
memset (Nf, 0, sizeof (Nf));
for (i = 1; i <= N; ++ i)
fi[i].clear();
scanf ("%d\n", &N);
for (i = 1; i < N; ++ i)
{
x = y = 0;
gets (sir);
l = strlen (sir);
//puts (sir);
for (j = l - 1, ct = 1; sir[j] != ' '; -- j, ct *= 10)
y += (sir[j] - '0') * ct;
for (ct = 1, -- j; j >= 0; -- j, ct *= 10)
x += (sir[j] - '0') * ct;
//printf ("%d %d\n", x, y);
fi[x].pb (y);
++ Nf[x];
}
df (1);
printf ("%d\n", s[1]);
}
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
return 0;
}