Pagini recente » Cod sursa (job #1187561) | Cod sursa (job #1941996) | Cod sursa (job #1677108) | Cod sursa (job #2915274) | Cod sursa (job #101111)
Cod sursa(job #101111)
#include <stdio.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
#define NMAX 100100
int N, Case;
int A[NMAX][NMAX], V[NMAX], Viz[NMAX], F[NMAX], Ord[NMAX];
void init()
{
int i, j;
for (i = 0; i < NMAX; i++)
{
for (j = 0; j < NMAX; j++) A[i][j] = 0;
V[i] = Viz[i] = F[i] = Ord[i] = 0;
}
}
void read()
{
int i, j, k;
scanf("%d", &N);
for (k = 1; k < N; k++)
scanf("%d%d", &i, &j), A[i][j] = 1;
}
void dfs(int i)
{
int j, k, poz, max;
for (j = 1; j <= N; j++)
if (A[i][j]) dfs(j);
for (j = 1; j <= N; j++)
if (A[i][j]) Viz[j] = 0;
Ord[0] = 0;
for (j = 1; j <= N; j++) Ord[j] = Ord[j-1]+A[i][j];
for (j = 1, V[i] = 0; j <= N; j++)
if (A[i][j])
{
max = 0; poz = 0;
for (k = 1; k <= N; k++)
if (A[i][k] && !Viz[k] && max<=V[k])
max = V[k], poz = k;
V[i] = MAX(V[i],max+Ord[j]);
Viz[poz] = 1;
}
}
void solve()
{
dfs(1);
printf("%d\n", V[1]);
}
int main()
{
freopen("zvon.in", "r", stdin);
freopen("zvon.out", "w", stdout);
scanf("%d", &Case);
while (Case--)
{
init();
read();
solve();
}
return 0;
}