Pagini recente » Cod sursa (job #1884917) | Cod sursa (job #1664775) | Cod sursa (job #2940333) | Cod sursa (job #2663370) | Cod sursa (job #100592)
Cod sursa(job #100592)
#include <cstdio>
#include <vector>
#include <queue>
#define maxN 100001
using namespace std;
vector <int> V[maxN];
int sol;
int Lv[maxN];
int Lm[maxN];
int Nr[maxN];
int Ti[maxN];
int Co[maxN];
class comp
{
public:
bool operator()(int i, int j)
{
if(Nr[i] == Nr[j])
return Lm[i] > Lm[j];
return Nr[i] < Nr[j];
};
};
priority_queue <int, vector <int>, comp> q;
void df(int k)
{
int i, nod, n = V[k].size();
Nr[k] = 1;
if(!n)
Lm[k] = Lv[k];
for(i=0; i<n; ++i)
{
nod = V[k][i];
Lv[nod] = Lv[k] + 1;
df(nod);
Nr[k] += Nr[nod];
if(Lm[nod] > Lm[k])
Lm[k] = Lm[nod];
}
}
void bf()
{
int st, end, nod, k, n, i, j;
st = 1;
end = 1;
Co[1] = 1;
while(st <= end)
{
nod = Co[st];
++ st;
n = V[nod].size();
for(i=0; i<n; ++i)
{
q.push(V[nod][i]);
Co[++end] = V[nod][i];
}
V[nod].clear();
j = 1;
while(q.empty() == false)
{
k = q.top();
q.pop();
Ti[k] = Ti[nod] + j;
++ j;
sol = Ti[k] > sol ? Ti[k] : sol;
}
}
}
int main()
{
freopen("zvon.in", "rt", stdin);
freopen("zvon.out", "wt", stdout);
int T, N, a, b, i;
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[1] = 0;
Lv[1] = 0;
sol = 0;
df(1);
bf();
printf("%d\n", sol);
}
return 0;
}