Pagini recente » Cod sursa (job #2477424) | Cod sursa (job #963892) | Cod sursa (job #2279655) | Cod sursa (job #1869857) | Cod sursa (job #1572733)
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 100005;
int vf[N], lst[N], urm[N], m, timp[N];
void golire (int n)
{
m = 0;
int i;
for (i = 1; i <= n; i++)
{
lst[i] = 0;
urm[i] = 0;
}
}
void adauga (int x, int y)
{
vf[++m] = y;
urm[m] = lst[x];
lst[x] = m;
}
int maximum (int ic, int sf)
{
sort (timp + ic, timp + sf + 1);
int i, maxim = 0, ct = 1;
for (i = sf; i >= ic; i--)
{
if (timp[i] + ct > maxim)
maxim = timp[i] + ct;
ct++;
}
return maxim;
}
int dfs (int x, int inceput)
{
int y, p, sf = inceput;
p = lst[x];
while (p != 0)
{
y = vf[p];
timp[++sf] = dfs(y, sf);
p = urm[p];
}
if (sf == inceput)
return 0;
else
return maximum (inceput + 1, sf);
}
int main ()
{
FILE *in, *out;
in = fopen ("zvon.in", "r");
out = fopen ("zvon.out", "w");
int teste, t, n, i, x, y;
fscanf (in, "%d", &teste);
for (t = 1; t <= teste; t++)
{
fscanf (in, "%d", &n);
golire (n);
for (i = 1; i <= n - 1; i++)
{
fscanf (in, "%d%d", &x, &y);
adauga (x, y);
}
fprintf (out, "%d\n", dfs(1, 0));
}
return 0;
}