Submission #985123

#TimeUsernameProblemLanguageResultExecution timeMemory
985123TsaganaDuathlon (APIO18_duathlon)C++14
100 / 100
96 ms29780 KiB
#include<bits/stdc++.h> #define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie(); #define all(x) x.begin(), x.end() #define int long long #define pi pair<int, int > #define pq priority_queue #define lb lower_bound #define ub upper_bound #define pb push_back #define eb emplace_back #define mset multiset #define F first #define S second using namespace std; vector<vector<int>> adj, bcg; vector<int> ord, low, siz; stack <int> st; int t = 0, cnt = 0, k, u, v; int ans = 0, ss = 0, n, m; void findBCC(int cur, int par) { t++; ss++; ord[cur] = low[cur] = t; st.push(cur); for (int v : adj[cur]) { if (!ord[v]) { findBCC(v, cur); low[cur] = min(low[cur], low[v]); if (low[v] == ord[cur]) { int tmp = -1; k++; bcg[cur].pb(k); while (tmp != v) {tmp = st.top(); st.pop(); bcg[k].pb(tmp);} } } low[cur] = min(low[cur], ord[v]); } } void subtract(int cur) { siz[cur] = cur < n; for (int v : bcg[cur]) { subtract(v); siz[cur] += siz[v]; if (cur >= n) ans -= bcg[cur].size() * siz[v] * (siz[v] - 1); } if (cur >= n) ans -= bcg[cur].size() * (ss - siz[cur]) * (ss - siz[cur] - 1); } void solve () { cin >> n >> m; ord.resize(n); adj.resize(n); low.resize(n); bcg.resize(n * 2 + 1); siz.resize(n * 2 + 1); k = n - 1; for (int i = 0; i < m; i++) { cin >> u >> v; u--; v--; adj[u].pb(v); adj[v].pb(u); } for (int i = 0; i < n; i++) { if (!ord[i]) { ss = 0; findBCC(i, -1); ans += ss * (ss - 1) * (ss - 2); subtract(i); } } cout << ans; } signed main(){IOS solve(); 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...