Submission #958535

#TimeUsernameProblemLanguageResultExecution timeMemory
958535Cyber_Wolf철인 이종 경기 (APIO18_duathlon)C++17
0 / 100
82 ms40392 KiB
#include <bits/stdc++.h> using namespace std; #define lg long long #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); const lg N = 2e5+5; vector<lg> adj[N],adj2[N], p, comps[N]; lg low[N], ans, n, m, artic[N], tin[N], tmp, vis[N], id[N], ids, sz[N], n2; void dfs(lg src, lg par = -1) { low[src] = tin[src] = ++tmp; n2++; p.push_back(src); for(auto it : adj[src]) { if(it == par) { continue; } if(tin[it]) { low[src] = min(low[src], tin[it]); continue; } dfs(it, src); low[src] = min(low[src], low[it]); if(low[it] >= tin[src]) { artic[src] = (tin[src] > 1 || tin[it] > 2); ids++; adj2[src].push_back(n+ids); while(adj2[n+ids].empty() || adj2[n+ids].back() != it) { adj2[n+ids].push_back(p.back()); p.pop_back(); } } } } void dfs2(lg src) { sz[src] = (src <= n); vis[src] = true; for(auto it : adj2[src]) { if(vis[it]) continue; dfs2(it); sz[src] += sz[it]; if(src > n) { ans -= sz[it]*(sz[it]-1)*adj2[src].size(); } } if(src > n) { ans -= (n2-sz[src])*(n2-sz[src]-1)*adj2[src].size(); } } int main() { fastio; cin >> n >> m; ans = n*(n-1)*(n-2); for(int i = 0; i < m; i++) { lg u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for(int i = 1; i <= n; i++) { if(tin[i]) continue; n2 = 0; dfs(i); dfs2(i); } cout << ans << '\n'; return 0; } /* 123 c 124 c 134 c 132 x 142 x 143 x */
#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...