Pagini recente » Cod sursa (job #2920601) | Cod sursa (job #3235131) | Cod sursa (job #2424402) | Cod sursa (job #2121359) | Cod sursa (job #3278411)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1e5;
vector<int> sum(N + 1, 1);
bool cmp(int a, int b)
{
return sum[a] > sum[b];
}
void dfs_sum(int x, vector<vector<int>> &vec, vector<bool> &viz)
{
viz[x] = true;
for (auto y : vec[x])
{
if (!viz[y])
{
dfs_sum(y, vec, viz);
sum[x] += sum[y];
}
}
}
void dfs(int x, vector<vector<int>> &vec, vector<bool> &viz, vector<int> &sol, int &maxi)
{
viz[x] = true;
maxi = max(sol[x], maxi);
int ct = 1;
for (auto y : vec[x])
{
if (!viz[y])
{
sol[y] = sol[x] + ct;
ct++;
dfs(y, vec, viz, sol, maxi);
}
}
}
int main()
{
ifstream in("zvon.in");
ofstream out("zvon.out");
int t;
in >> t;
while (t--)
{
int n;
in >> n;
vector<vector<int>> vec(n + 1);
vector<int> sum(n + 1, 1);
vector<bool> tati(n + 1, true);
for (int i = 1; i < n; i++)
{
int a, b;
in >> a >> b;
vec[a].push_back(b);
tati[b] = false;
}
vector<bool> viz(n + 1, false);
for (int i = 1; i <= n; i++)
{
if (tati[i])
{
dfs_sum(i, vec, viz);
}
}
for (int i = 1; i <= n; i++)
{
sort(vec[i].begin(), vec[i].end(), cmp);
}
vector<int> sol(n + 1, 0);
int maxi = 0;
for (int i = 1; i <= n; i++)
{
viz[i] = false;
}
for (int i = 1; i <= n; i++)
{
if (tati[i])
{
dfs(i, vec, viz, sol, maxi);
}
}
out << maxi << "\n";
for (int i = 1; i <= n; i++)
{
sum[i] = 1;
}
}
in.close();
out.close();
return 0;
}