제출 #218002

#제출 시각아이디문제언어결과실행 시간메모리
218002Vimmer철인 이종 경기 (APIO18_duathlon)C++14
36 / 100
630 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 ans, 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) { 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; ans++;} return f; } bool opr(int v, int p) { if (v == i && p != -1) return 1; mkr[v] = 1; kol++; for (auto it : g[v]) { if (it == p) continue; if (opr(it, v)) return 1; } return 0; } 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 (n <= 10 && m <= 100) { ans = 0; 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);} cout << ans << endl; exit(0); } for (i = 1; i <= n; i++) { if (mkr[i]) continue; kol = 0; if (opr(i, -1)) anser += max(0ll, kol * (kol - 1) * (kol - 2)); else if (kol > 2) 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...