Submission #559812

#TimeUsernameProblemLanguageResultExecution timeMemory
559812hoanghq2004철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
91 ms22768 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>; const int N = 1e5 + 10; int n, m; vector <int> e[N], g[N]; vector <int> stk; int num[N], low[N], ti, cnt, comp[N], a[N], sz[N]; long long ans; void dfs(int u, int p) { num[u] = low[u] = ++ti; stk.push_back(u); for (auto v: g[u]) { if (v == p) continue; if (!num[v]) { dfs(v, u); low[u] = min(low[u], low[v]); } else low[u] = min(low[u], num[v]); } if (low[u] != num[u]) return; ++cnt; while (1) { int v = stk.back(); stk.pop_back(); comp[v] = cnt; ++a[cnt]; if (u == v) break; } } int init(int u, int p) { int ans = a[u]; for (auto v: e[u]) { if (v == p) continue; ans += init(v, u); } return ans; } void solve(int u, int p, int m) { sz[u] = a[u]; for (auto v: e[u]) { if (v == p) continue; solve(v, u, m); sz[u] += sz[v]; } int cur = m - sz[u]; for (auto v: e[u]) { if (v == p) continue; ans += 2LL * sz[v] * cur * a[u]; cur += sz[v]; } ans += 2LL * (m - sz[u]) * (a[u] - 1) * (a[u] - 1); for (auto v: e[u]) { if (v == p) continue; ans += 2LL * sz[v] * (a[u] - 1) * (a[u] - 1); } ans += a[u] * (a[u] - 1) * (a[u] - 2); } int main() { ios :: sync_with_stdio(0); cin.tie(0); cin >> n >> m; while (m--) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } for (int i = 1; i <= n; ++i) if (!num[i]) dfs(i, 0); for (int u = 1; u <= n; ++u) for (auto v: g[u]) if (comp[u] != comp[v]) e[comp[u]].push_back(comp[v]); for (int i = 1; i <= cnt; ++i) if (!sz[i]) { int m = init(i, 0); solve(i, 0, m); } cout << ans; }
#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...