Pagini recente » Cod sursa (job #1702362) | Cod sursa (job #438698) | Cod sursa (job #849547) | Cod sursa (job #556419) | Cod sursa (job #119484)
Cod sursa(job #119484)
#include<stdio.h>
#include<algorithm>
#define lg 100005
using namespace std;
int teste, nrt, n, nr[lg], *v[lg], tr[lg], tata, rz, a, b, i, cm[lg];
struct vector{
int n, v;
};
vector q[lg];
int cmp(vector a, vector b){
if (a.v != b.v)
return (a.v > b.v);
return 0;
}
void dtr(int nod, int str){
int i;
for (i=1; i<=nr[nod]; i++)
dtr(v[nod][i], nod);
cm[nod] += nr[nod];
cm[str] += cm[nod];
}
void df(int nod, int val){
int i;
if (!nr[nod]){
rz = max(rz, val);
return ;
}
int ind = 0;
for (i = 1; i <= nr[nod]; i ++)
q[++ind].n = v[nod][i], q[ind].v = cm[v[nod][i]];
sort(q+1, q+nr[nod]+1, cmp);
for (i = 1; i <= nr[nod]; i ++)
df(q[i].n, i+val);
}
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, cm[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;
}
dtr(tata, 0);
rz = 0;
df(tata, 0);
printf("%d\n", rz);
}
fclose(stdin);
fclose(stdout);
return 0;
}