// Starcraft 2 enjoyer //
#include <bits/stdc++.h>
// #pragma GCC target("avx2")
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
using namespace std;
#define LSOne(X) ((X) & -(X))
#define int long long
const int N = 5e5 + 5;
const int M = 1e3 + 5;
const int LG = 60;
const int C = 26;
const long long INF = 2e9 + 5;
const int B = 400;
const int MOD = 1e9 + 7;
int n, m;
vector<int> adj[N];
long long ans, mx[N], cnt, up[N];
void dfs1(int c, int p)
{
for (int i : adj[c])
{
if (i == p)
continue;
dfs1(i, c);
mx[c] = max(mx[c], mx[i] + 1);
}
}
void dfs2(int c, int p)
{
vector<int> v;
map<int, int> mp;
for (int i : adj[c])
{
if (i == p)
continue;
mp[mx[i] + 1]++;
v.push_back(mx[i] + 1);
up[i] = max(up[i], up[c] + 1);
}
mp[up[c]]++;
v.push_back(up[c]);
sort(v.rbegin(), v.rend());
if (v.size() > 2)
{
if (ans < v[0] * (v[1] + v[2]))
{
ans = v[0] * (v[1] + v[2]);
cnt = 0;
}
if (ans <= v[0] * (v[1] + v[2]))
{
if (v[1] == v[2])
{
cnt += mp[v[1]] * (mp[v[2]] - 1) / 2;
}
else
{
cnt += mp[v[1]] * mp[v[2]];
}
// cout << ans << " " << cnt << "\n";
}
}
int cmx = -1;
for (int i : adj[c])
{
if (i == p)
continue;
up[i] = max(up[i], cmx + 2);
cmx = max(cmx, mx[i]);
}
reverse(adj[c].begin(), adj[c].end());
cmx = -1;
for (int i : adj[c])
{
if (i == p)
continue;
up[i] = max(up[i], cmx + 2);
cmx = max(cmx, mx[i]);
}
for (int i : adj[c])
{
if (i == p)
continue;
dfs2(i, c);
}
}
inline void solve()
{
cin >> n;
for (int x = 0; x < n - 1; x++)
{
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
m = 0;
for (int x = 1; x <= n; x++)
{
if (adj[x].size() == 1)
m++;
}
cnt = ans = 0;
cnt = m * (m - 1) / 2;
dfs1(1, 0);
dfs2(1, 0);
cout << ans << " " << cnt << "\n";
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
for (int x = 1; x <= t; x++)
{
solve();
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |