Submission #279729

#TimeUsernameProblemLanguageResultExecution timeMemory
279729nvmdavaDuathlon (APIO18_duathlon)C++17
0 / 100
184 ms32632 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int N = 200005; const ll MOD = 1000000007; const int INF = 0x3f3f3f3f; vector<int> adj[N]; int d[N], n; bool sep[N]; int dfs(int v){ int t = N; for(auto& x : adj[v]){ if(d[x] == d[v] - 1) continue; if(d[x] == -1){ d[x] = d[v] + 1; int a = dfs(x); if(a >= d[v]) sep[x] = 1; t = min(t, a); } else t = min(t, d[x]); } return t; } int sz[N]; int cnt = 0; vector<int> adj2[N]; void dfs2(int v, int c){ ++sz[c]; bool did = 0; int nv = 0; for(auto& x : adj[v]){ if(d[x] != d[v] + 1) continue; if(sep[x]){ if(did == 0){ nv = ++cnt; did = 1; if(d[v] != 1){ adj2[c].push_back(nv); adj2[nv].push_back(c); } } adj2[nv].push_back(++cnt); adj2[cnt].push_back(nv); sz[cnt] = 1; dfs2(x, cnt); } else { dfs2(x, c); } } } ll ans = 0; int szz[N]; void dfs3(int v, int p){ vector<int> a; for(auto& x : adj2[v]){ if(x == p) continue; dfs3(x, v); szz[v] += szz[x] - 1; a.push_back(szz[x] - 1); } szz[v] += max(1, sz[v]); a.push_back(n - szz[v]); if(sz[v]){ for(auto& x : a){ ans -= 1LL * (sz[v] - 1) * x * (x + 1); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int m; cin>>n>>m; while(m--){ int v, u; cin>>v>>u; adj[v].push_back(u); adj[u].push_back(v); } for(int i = 1; i <= n; ++i) d[i] = -1; d[1] = 1; dfs(1); dfs2(1, 0); dfs3(1, 0); ans += 1LL * n * (n - 1) * (n - 2); cout<<ans; }
#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...