Submission #1127816

#TimeUsernameProblemLanguageResultExecution timeMemory
1127816SeDunionHard route (IZhO17_road)C++20
0 / 100
17 ms23880 KiB
#include <iostream>
#include <vector>

using namespace std;
using pii = pair<int ,int>;
using ll = long long;
using pll = pair<ll, ll>;

const int N = 1e6 + 123;

vector<int> g[N];

pll ans = {0, 1};

void upd(ll x) {
    if (x <= 0) return;
    if (ans.first == x) ans.second++;
    else if (ans.first < x) ans = {x, 1};
}

int dfs(int v, int p = -1) {
    vector<ll> vec;
    for (int to : g[v]) if (to != p) {
        int cur = dfs(to, v) + 1;
        vec.emplace_back(cur);
    }
    sort(vec.rbegin(), vec.rend());
    if (p == -1) {
        if (vec.size() >= 3) {
            for (int i = 0 ; i < 3 ; ++ i) {
                for (int j = 0 ; j < i ; ++ j) {
                    int k = 3 - i - j;
                    upd(vec[k] * (vec[i] + vec[j]));
                }
            }
        }
    }
    return (!vec.empty() ? vec[0] : 0);
}


int main() {
    ios_base::sync_with_stdio(false), cin.tie(0);
    int n;
    cin >> n;
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        g[a].emplace_back(b);
        g[b].emplace_back(a);
    }
    for (int i = 1 ; i <= n ; ++ i) {
        dfs(i);
    }
    cout << ans.first << ' ' << ans.second << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...