Submission #217973

#TimeUsernameProblemLanguageResultExecution timeMemory
217973VimmerDuathlon (APIO18_duathlon)C++14
23 / 100
1124 ms1048580 KiB
#include <bits/stdc++.h> #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 100005 #define M ll(998244353) using namespace std; typedef long double ld; typedef long long ll; typedef short int si; vector <int> g[N]; bool mk[N], mkr[N]; int i, j, n, m; ll anser, siz[N], kol; void calc(int v, int p) { if (p != -1) {siz[p] -= siz[v]; siz[v] += siz[p];} for (auto it : g[v]) anser += (siz[v] - 1 - siz[it]) * siz[it]; for (auto it : g[v]) {if (p == it) continue; calc(it, v);} if (p != -1) {siz[v] -= siz[p]; siz[p] += siz[v];} } void dfs(int v, int p) { mkr[v] = 1; siz[v] = 0; for (auto it : g[v]) { if (it == p) continue; dfs(it, v); siz[v] += siz[it]; } siz[v]++; if (i == v) calc(v, -1); } bool dostig(int v, int to) { if (mk[v]) return 0; if (v == to) return 1; mk[v] = 1; bool f = 0; for (auto it : g[v]) f |= dostig(it, to); mk[v] = 0; if (f && v != i && !mkr[v]) {mkr[v] = 1; anser++;} return f; } bool opr(int v, int p) { mkr[v] = 1; kol++; bool f = 0; for (auto it : g[v]) { if (it == p) continue; if (mkr[it]) f = 1; else f |= opr(it, v); } return f; } int main() { ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; g[x].pb(y); g[y].pb(x); } if (m <= n - 1) { for (i = 1; i <= n; i++) if (siz[i] == 0) dfs(i, -1); } else if (n <= 10 && m <= 100) { for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if (i != j){for (int u = 0; u < 51; u++) mkr[u] = 0; dostig(i, j);} } else { for (i = 1; i <= n; i++) { if (mkr[i]) continue; kol = 0; if (opr(i, -1)) { anser += max(0ll, kol * (kol - 1) * (kol - 2)); continue; } else dfs(i, -1); } } cout << anser << endl; }
#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...