제출 #1043304

#제출 시각아이디문제언어결과실행 시간메모리
1043304vjudge1철인 이종 경기 (APIO18_duathlon)C++17
47 / 100
645 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N = 1e5 + 10; ll n, m, subsz[N], dp[N]; vector<ll> g[N], comp; bool vis[N], possible[105][105][105]; void dfs_brute(ll v, ll y, ll z){ if (v == z) return; vis[v] = 1; for (ll u : g[v]) if (!vis[u]) dfs_brute(u, y, z); } void dfs(ll v, ll p = -1){ vis[v] = 1; comp.push_back(v); subsz[v] = 1; for (ll u : g[v]){ if (vis[u]) continue; dfs(u, v); subsz[v] += subsz[u]; } ll cur = 0; for (ll u : g[v]){ if (u == p) continue; dp[v] += subsz[u] * cur; cur += subsz[u]; } } void dfs_up(ll v, ll p = -1){ for (ll u : g[v]){ if (u == p) continue; dfs_up(u, v); } dp[v] += (comp.size() - subsz[v]) * (subsz[v] - 1); } int main(){ cin >> n >> m; for (ll i = 0; i < m; i ++){ ll u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } ll total = n * (n - 1) * (n - 2); if (n <= 100 and m <= 100){ for (ll u = 1; u <= n; u ++){ for (ll v = 1; v <= n; v ++){ for (ll e = 1; e <= n; e ++){ for (ll x = 1; x <= n; x ++) vis[x] = 0; dfs_brute(u, v, e); if (vis[v]) possible[u][v][e] = 1; } } } for (ll c = 1; c <= n; c ++){ for (ll s = 1; s <= n; s ++){ for (ll f = 1; f <= n; f ++){ if (c == s or c == f or s == f) continue; bool bad = 0; for (ll v = 1; v <= n; v ++){ if (v == c) continue; if (!possible[s][c][v] and !possible[c][f][v]) bad = 1; } total -= bad; } } } cout << total << endl; return 0; } ll ans = 0; for (ll v = 1; v <= n; v ++){ if (vis[v]) continue; comp.clear(); dfs(v); ll edges = 0; for (ll x : comp) edges += g[x].size(); edges /= 2; ll nodes = comp.size(); if (nodes == edges){ ans += nodes * (nodes - 1) * (nodes - 2); continue; } dfs_up(v); for (ll u : comp) ans += dp[u] * 2; } cout << ans << 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...