Pagini recente » Cod sursa (job #644580) | Cod sursa (job #283329) | Cod sursa (job #2012599) | Cod sursa (job #841098) | Cod sursa (job #98726)
Cod sursa(job #98726)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 100005
vector<int> con[MAXN];
int N, p[MAXN], root;
int bst[MAXN];
inline int cmp( int a, int b ) { return bst[a] > bst[b]; }
void dfs( int k )
{
if (con[k].empty())
{
bst[k] = 0;
return;
}
vector<int> :: iterator it;
for (it = con[k].begin(); it != con[k].end(); it++)
dfs( *it );
sort( con[k].begin(), con[k].end(), cmp );
bst[k] = 0;
int time = 0;
for (it = con[k].begin(); it != con[k].end(); it++, time++)
bst[k] = max( bst[k], bst[*it] + time );
bst[k]++;
}
int main()
{
freopen("zvon.in", "rt", stdin);
freopen("zvon.out", "wt", stdout);
int T;
for (scanf("%d", &T); T; T--)
{
scanf("%d", &N);
for (int i = 1; i <= N; i++)
con[i].clear(), p[i] = 0;
for (int k = 1; k < N; k++)
{
int a, b;
scanf("%d %d", &a, &b);
con[a].push_back(b); p[b] = a;
}
for (int i = 1; i <= N; i++)
if (p[i] == 0)
root = i;
dfs(root);
printf("%d\n", bst[root]);
}
return 0;
}