Pagini recente » Cod sursa (job #2053237) | Cod sursa (job #2830779) | Cod sursa (job #143912) | Cod sursa (job #1538825) | Cod sursa (job #176737)
Cod sursa(job #176737)
using namespace std;
#include <algorithm>
#include <vector>
#include <cstdio>
#define nmax 100005
int V[nmax], g[nmax], t[nmax];
vector<int> L[nmax];
int T, N;
bool cmp(const int &a, const int &b)
{
return V[a] >= V[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;
}
for (it = L[n].begin(), i = 0; it != L[n].end(); ++it, ++i)
g[i] = *it;
sort(g, g+i, cmp);
for (j = 0; j < i; ++j)
if (j+V[g[j]] > V[n])
V[n] = j+V[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;
}