Pagini recente » Cod sursa (job #930947) | Cod sursa (job #1702486) | Cod sursa (job #2452898) | Cod sursa (job #1190976) | Cod sursa (job #176742)
Cod sursa(job #176742)
using namespace std;
#include <algorithm>
#include <vector>
#include <cstdio>
#define nmax 100005
int V[nmax], t[nmax];
vector<int> L[nmax], g;
int T, N;
bool cmp(const int a, const int b)
{
return a > b;
}
void dfs(int n)
{
int i, j, nrvecini = V[n] = 0;
vector<int>::iterator it;
for (it = L[n].begin(); it != L[n].end(); ++it, ++nrvecini)
dfs(*it);
if (nrvecini == 0)
{
V[n] = 0;
return;
}
g.clear();
for (it = L[n].begin(), i = 0; it != L[n].end(); ++it, ++i)
g.push_back(V[*it]);
sort(g.begin(), g.end(), cmp);
for (j = 0; j < i; ++j)
if (j+g[j] > V[n])
V[n] = j+g[j];
++V[n];
}
int main()
{
int i, a, b;
freopen("zvon.in", "r", stdin);
freopen("zvon.out", "w", stdout);
scanf("%d", &T);
while (T--)
{
scanf("%d", &N);
if (N == 1)
printf("0\n");
else
{
for (i = 1; i <= N; ++i)
{
L[i].clear();
t[i] = 0;
}
for (i = 1; i < N; ++i)
{
scanf("%d%d", &a, &b);
L[a].push_back(b);
t[b]++;
}
for (i = 1; t[i]; ++i);
dfs(i);
printf("%d\n", V[i]);
}
}
return 0;
}