Pagini recente » Cod sursa (job #2356914) | Cod sursa (job #2905743) | Cod sursa (job #1930352) | Cod sursa (job #2237939) | Cod sursa (job #312424)
Cod sursa(job #312424)
#include<cstdio>
#include<vector>
#include<string>
using namespace std;
#define MAX_N 100003
int NR[MAX_N];
vector<int>G[MAX_N];
int N,T,S;
int viz[MAX_N];
int Timp[MAX_N], sol;
struct Lista
{
int nod, nr;
};
void dfs(int x)
{
int i;
if(NR[x]) return;
NR[x] = 1;
for(i=0;i<G[x].size();++i)
{
dfs(G[x][i]);
NR[x] += NR[G[x][i]];
}
}
struct cmp
{
bool operator()(const Lista &a,const Lista &b)const
{
return (a.nr > b.nr);
}
};
void df(int x)
{
int i,y;
if(viz[x]) return;
viz[x] = 1;
vector<Lista> L;
Lista q;
for(i = 0; i<G[x].size(); ++i)
{
q.nr = NR[G[x][i]]; q.nod = G[x][i];
L.push_back(q);
}
sort(L.begin(),L.end(), cmp());
for(i = 0; i<L.size(); ++i)
{
y = L[i].nod;
Timp[y] = Timp[x] + i + 1;
}
for( i=0; i<G[x].size(); ++i) df(G[x][i]);
}
void solve()
{
int i;
for(i=1;i<=N;++i) G[i].clear();
scanf("%d",&N);
int x,y;
memset(viz,0,sizeof(viz));
memset(Timp,0,sizeof(Timp));
for(i=1;i<N;++i)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
memset(NR,0,sizeof(NR));
dfs(1); sol = -1;
df(1);
for(i=1;i<=N;++i) if(sol < Timp[i]) sol = Timp[i];
printf("%d\n",sol);
}
int main()
{
N = 0;
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d",&T);
while(T--) solve();
return 0;
}