Pagini recente » Cod sursa (job #1053518) | Cod sursa (job #1841842) | Cod sursa (job #4377) | Cod sursa (job #1601408) | Cod sursa (job #119504)
Cod sursa(job #119504)
#include<stdio.h>
#include<algorithm>
#define lg 100005
using namespace std;
int teste, nrt, n, nr[lg], tr[lg], tata, a, b, i, *v[lg], vl[lg];
struct vectr{
int n, v;
};
vectr q[lg];
int cmp(int a, int b){
if (a != b)
return (a > b);
return 0;
}
void df(int nod){
int i;
if (!nr[nod]){
vl[nod] = 0;
return ;
}
int ind = 0, q[nr[nod]+1];
for (i = 1; i <= nr[nod]; i ++)
df(v[nod][i]);
for (i = 1; i <= nr[nod]; i ++)
q[++ind] = vl[v[nod][i]];
sort(q+1, q+ind+1, cmp);
for (i = 1; i <= nr[nod]; i ++)
vl[nod] = max(vl[nod], i+q[i]);
}
int main()
{
freopen("zvon.in", "rt", stdin);
freopen("zvon.out", "wt", stdout);
scanf("%d", &teste);
for (nrt = 1; nrt <= teste; nrt ++){
scanf("%d", &n);
for (i = 1; i <= n; i ++)
nr[i] = 0, tr[i] = 0, vl[i] = 0;
for (i = 1; i < n; i ++){
scanf("%d%d", &a, &b);
nr[a] ++;
v[a] = (int*)realloc(v[a], (nr[a]+1)*sizeof(int));
v[a][nr[a]] = b;
tr[b] = 1;
}
for (i = 1; i <= n; i ++)
if (!tr[i]){
tata = i;
break;
}
df(tata);
printf("%d\n", vl[1]);
}
fclose(stdin);
fclose(stdout);
return 0;
}