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...