Pagini recente » Cod sursa (job #16833) | Cod sursa (job #2025779) | Cod sursa (job #2055558) | Cod sursa (job #2275354) | Cod sursa (job #102066)
Cod sursa(job #102066)
#include <stdio.h>
#include <fstream>
#include <vector>
#include <set>
using namespace std;
#define in "zvon.in"
#define out "zvon.out"
#define dim 100001
int T, N, M, Q;
int Vec[dim];
bool Sel[dim], Sel2[dim];
vector<int> H;
vector< vector<int> > L, L2;
struct Compare {
bool operator() (const int &i, const int &j) const
{
return Vec[i] > Vec[j];
}
};
void DF(int);
void Solve(int,int);
int main()
{
int X, Y, j;
int maxim, poz;
char linie[25];
FILE *fin = fopen(in,"r");
freopen(out,"w",stdout);
fscanf(fin,"%d\n", &T);
for ( ; T > 0; T-- )
{
fscanf(fin,"%d\n", &N);
memset(Sel,0,sizeof(Sel));
memset(Vec,0,sizeof(Vec));
memset(Sel2,0,sizeof(Sel2));
L.clear(); L.resize(N+1);
if ( N == 1 )
{
printf("0\n");
continue;
}
for ( int i = 0; i < N-1; i++ )
{
fgets(linie,21,fin);
X = Y = j = 0;
while ( linie[j] != ' ' ) X *= 10, X += (int)linie[j]-48, j++;
j += 1;
while ( linie[j] != '\n' ) Y *= 10, Y += (int)linie[j]-48, j++;
L[X].push_back(Y);
}
DF(1);
for ( int i = 1; i <= N; i++ )
if ( L[i].size() > 1 ) sort(L[i].begin(), L[i].end(), Compare() );
/*for ( int i = 0; i < H.size(); i++ )
{
S.clear();
for ( int j = 0; j < L[H[i]].size(); j++ )
S.insert( L[H[i]][j] );
for ( it = S.begin(); it != S.end(); it++ )
L2[H[i]].push_back(*it);
}*/
/*for ( int i = 1; i < N; i++ )
scanf("%d%d", &X, &Y), L[X].push_back(Y);*/
Q = 0;
Solve(1,0);
printf("%d\n", Q);
}
}
void Solve(int nod, int timp)
{
Sel2[nod] = 1;
if ( Q < timp ) Q = timp;
for ( int i = 0; i < L[nod].size(); i++ )
{
if ( !Sel2[L[nod][i]] ) Solve(L[nod][i],timp+i+1);
}
}
void DF(int nod)
{
Sel[nod] = 1;
for ( int i = 0; i < L[nod].size(); i++ )
{
if ( !Sel[L[nod][i]] )
{
DF(L[nod][i]);
Vec[nod] += Vec[L[nod][i]] + 1;
}
}
if ( L[nod].size() == 0 ) Vec[nod] = 0;
}