Submission #1160918

#TimeUsernameProblemLanguageResultExecution timeMemory
1160918not_amirDuathlon (APIO18_duathlon)C++20
0 / 100
1130 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

struct ret {
    vector<ll> c = {};
    ll suma = 0, summ = 0;

    void expand(int val = 0) {
        summ += suma;
        suma += val;
        c.push_back(val);
    }

    ret(int val) {
        expand(val);
    }

    ll& operator[](int idx) {
        return c[c.size() - 1 - idx];
    }

    [[nodiscard]] int siz() {
        return c.size();
    }
};

ll combine(ret& tot, ret sml) {
    ll ans = 0;
    for (int i = 0; i < sml.siz(); i++) {
        ans += tot.suma * sml[i] * i;
        ans += tot.summ * sml[i];
        tot[i] += sml[i];
    }
    tot.suma += sml.suma;
    tot.summ += sml.summ;
    return ans;
}

ll ans = 0;

ret dfs(int v, int p, vector<vector<int>> &G) {
    ret curr(1);
    for (int u : G[v]) {
        if (u == p)
            continue;
        ret sml = dfs(u, v, G);
        sml.expand();
        if (sml.siz() > curr.siz())
            swap(sml, curr);
        ans += combine(curr, sml);
    }
    return curr;
}

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, m;
    cin >> n >> m;
    vector<vector<int>> G(n + 1);
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dfs(1, 0, G);
    cout << ans << '\n';
}

/*
5 4
1 2
1 3
2 4
2 5
 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...