Submission #158198

#TimeUsernameProblemLanguageResultExecution timeMemory
158198maruiiDuathlon (APIO18_duathlon)C++14
0 / 100
129 ms18296 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int N, M, dfn[100005], dfnn, low[100005], cpn[100005], cpnn, sz[100005]; vector<int> edge[100005], bdge[100005]; ll ans; void dfs(int x, int p) { dfn[x] = low[x] = ++dfnn; for (auto i : edge[x]) { if (i == p) continue; if (dfn[i]) { if (dfn[i] < dfn[x]) low[x] = min(low[x], dfn[i]); continue; } dfs(i, x); low[x] = min(low[x], low[i]); } } void bcc(int x, int c) { cpn[x] = c; sz[c]++; for (auto i : edge[x]) { if (cpn[i]) continue; if (low[i] == dfn[i]) { bdge[++cpnn].push_back(c); bdge[c].push_back(cpnn); bcc(i, cpnn); } else bcc(i, c); } } void calc(int x, int p) { ll n = sz[x], t = (N - n) * (N - n); ans += n * (n - 1) * (n - 2) + 2 * (n - 1) * (n - 1) * (N - n); for (auto i : bdge[x]) { if (i == p) continue; calc(i, x); sz[x] += sz[i]; t -= 1ll * sz[i] * sz[i]; } ans += n * (t - 1ll * (N - sz[x]) * (N - sz[x])); } int main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> N >> M; for (int i = 0; i < M; ++i) { int x, y; cin >> x >> y; edge[x].push_back(y); edge[y].push_back(x); } dfs(1, 1); bcc(1, ++cpnn); calc(1, 1); cout << ans; return 0; }
#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...