Pagini recente » Cod sursa (job #953463) | Cod sursa (job #2002942) | Cod sursa (job #261718) | Cod sursa (job #215549) | Cod sursa (job #1900183)
//copy
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("zvon.in");
ofstream fout("zvon.out");
int p, n;
const int NMAX=100010;
int tnod[NMAX];
vector<int> G[NMAX];
bool desc(int a, int b)
{
return a>b;
}
void analiza(int nod)
{
for(int i=0;i<G[nod].size();i++)
analiza(G[nod][i]);
sort(G[nod].begin(), G[nod].end(), desc);
//ca sa plecam in ordine descrescatoare ca sa terminam cu cati mai multi arbori simultan
for(int i=1;i<=G[nod].size();i++)
tnod[nod]=max(tnod[nod], tnod[G[nod][i-1]]+i);
//parcurgem lista subordonatilor de la subarborii mari spre subarborii mici, adaugand mereu cate o secunda (i) fiindca dureaza 1sec transferul catre un alt subordonat
//retinem maximul
}
int main()
{
fin>>p;
for(int i=1;i<=p;i++)
{
fin>>n;
for(int i=1;i<=n;i++)
{
G[i].clear();
tnod[i]=0;
}
for(int i=1, a, b;i<n;i++)
{
fin>>a>>b;
G[a].push_back(b);
}
analiza(1);
fout<<tnod[1]<<'\n';
}
return 0;
}