Pagini recente » Cod sursa (job #3220472) | Cod sursa (job #1665578) | Cod sursa (job #1360461) | Cod sursa (job #2424816) | Cod sursa (job #98837)
Cod sursa(job #98837)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int N_MAX = 10010;
vector <int> G[N_MAX];
int dad[N_MAX], nrf[N_MAX], tmp[N_MAX], tp = 0;
int numar(int nod)
{
vector <int>::iterator it;
for (it = G[nod].begin(); it != G[nod].end(); ++ it) {
nrf[nod] += (numar(*it) + 1);
}
return nrf[nod];
}
int cmp(int a, int b)
{
return (nrf[a] > nrf[b]);
}
int Q[N_MAX];
void timp(int nod)
{
int in = 1, sf = 2, nd, poz;
Q[in] = nod;
vector <int>::iterator it;
while (in != sf) {
nd = Q[in];
in ++;
for (it = G[nd].begin(), poz = 1; it != G[nd].end(); ++ it, poz ++) {
tmp[*it] = tmp[nd] + poz;
Q[sf ++] = *it;
}
}
}
int main()
{
freopen("zvon.in", "r", stdin);
#ifndef _SCREEN_
freopen("zvon.out", "w", stdout);
#endif
int T, N, i, a, b, rad = 0, MAX = 0;
for (scanf("%d\n", &T); T; T --) {
scanf("%d\n", &N);
memset(nrf, 0, sizeof(nrf));
for (i = 1; i <= N; i ++) G[i].clear();
for (i = 1; i < N; i ++) {
scanf("%d %d\n", &a, &b);
dad[b] = a;
G[a].push_back(b);
}
for (i = 1; i <= N; i ++) {
if (dad[i] == 0) {
rad = i;
break;
}
}
nrf[rad] = numar(rad);
for (i = 1; i <= N; i ++) {
sort(G[i].begin(), G[i].end(), cmp);
}
timp(rad);
MAX = 0;
for (i = 1; i <= N; i ++) {
if (tmp[i] > MAX) MAX = tmp[i];
}
printf("%d\n", MAX);
}
return 0;
}