Pagini recente » Cod sursa (job #599291) | Cod sursa (job #2062223) | Cod sursa (job #2733962) | Cod sursa (job #1969053) | Cod sursa (job #2637903)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("zvon.in");
ofstream fout("zvon.out");
vector<vector<int>> g;
vector<int> dp, Subordonati;
int TimpMax;
void df(int nod, int ant)
{
TimpMax = max(TimpMax, dp[nod]);
vector<pair<int, int>> angajati;
for (int neigh : g[nod])
{
if(neigh != ant)
angajati.push_back({ Subordonati[neigh], neigh });
}
sort(angajati.begin(), angajati.end());
reverse(angajati.begin(), angajati.end());
int timp = dp[nod];
for (auto angajat : angajati)
{
dp[angajat.second] = ++timp;
df(angajat.second, nod);
}
}
void dfSubordonati(int nod)
{
for (int neigh : g[nod])
{
dfSubordonati(neigh);
Subordonati[nod] += Subordonati[neigh] + 1;
}
}
int main()
{
int t;
fin >> t;
while (t--)
{
int n;
fin >> n;
g.clear();
g.resize(n + 1);
Subordonati.clear();
Subordonati.resize(n + 1);
for(int i = 1; i < n; i++)
{
int x, y;
fin >> x >> y;
g[x].push_back(y);
}
dfSubordonati(1);
TimpMax = 0;
dp.clear();
dp.resize(n + 1);
df(1, 0);
fout << TimpMax << '\n';
}
return 0;
}