Pagini recente » Cod sursa (job #958791) | Cod sursa (job #178875) | Cod sursa (job #299265) | Cod sursa (job #623830) | Cod sursa (job #100747)
Cod sursa(job #100747)
#include <cstdio>
#include <vector>
#include <queue>
#define maxN 100001
using namespace std;
vector <int> V[maxN];
int T;
int N;
int Ti[maxN];
void df(int nod)
{
int i, n;
n = V[nod].size();
for(i=0; i<n; ++i)
df(V[nod][i]);
for(i=0; i<n; ++i)
{
if(Ti[nod] < Ti[V[nod][i]] + 1)
Ti[nod] = Ti[V[nod][i]] + 1;
}
if(n >= Ti[nod])
{
priority_queue <int> q;
for(i=0; i<n; ++i)
q.push(Ti[V[nod][i]]);
int j = 1, k;
while(q.empty() == false)
{
k = q.top();
q.pop();
if(k + j > Ti[nod])
Ti[nod] = k + j;
++ j;
}
}
V[nod].clear();
}
int main()
{
freopen("zvon.in", "rt", stdin);
freopen("zvon.out", "wt", stdout);
int i, a, b, n;
for(scanf("%d", &T); T; --T)
{
for(scanf("%d", &N), i=1; i<N; ++i)
{
scanf("%d %d", &a, &b);
V[a].push_back(b);
++ Ti[a];
}
df(1);
printf("%d\n", Ti[1]);
for(i=1; i<=N; ++i)
Ti[i] = 0;
}
return 0;
}