제출 #610988

#제출 시각아이디문제언어결과실행 시간메모리
610988GusterGoose27Duathlon (APIO18_duathlon)C++11
49 / 100
251 ms60912 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MAXN = 1e5; vector<ll> edges[MAXN]; vector<ll> bcc_graph[2*MAXN]; ll n, m; ll csize; ll num_bcc = 0; ll depth[MAXN]; ll lp[MAXN]; bool vis[MAXN]; vector<ll> stck; ll sz[MAXN]; ll ans = 0; void make_bcc(ll cur, ll p = -1) { lp[cur] = depth[cur]; vis[cur] = 1; stck.push_back(cur); csize++; for (ll next: edges[cur]) { if (next == p) continue; if (vis[next]) { lp[cur] = min(lp[cur], depth[next]); continue; } depth[next] = 1+depth[cur]; make_bcc(next, cur); lp[cur] = min(lp[cur], lp[next]); if (lp[next] >= depth[cur]) { ll cur_bcc = n+(num_bcc++); bcc_graph[cur].push_back(cur_bcc); bcc_graph[cur_bcc].push_back(cur); while (bcc_graph[cur_bcc].back() != next) { ll b = stck.back(); stck.pop_back(); bcc_graph[b].push_back(cur_bcc); bcc_graph[cur_bcc].push_back(b); } } } } void make_ans(ll cur, ll p = -1) { if (cur < n) sz[cur]++; for (ll next: bcc_graph[cur]) { if (next == p) continue; make_ans(next, cur); sz[cur] += sz[next]; if (cur >= n) ans -= sz[next]*(sz[next]-1)*(bcc_graph[cur].size()-1); // can't include this articulation poll as a midpoll } ll out_sz = csize-sz[cur]; if (cur >= n) ans -= out_sz*(out_sz-1)*(bcc_graph[cur].size()-1); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for (ll i = 0; i < m; i++) { ll x, y; cin >> x >> y; x--; y--; edges[x].push_back(y); edges[y].push_back(x); } for (ll i = 0; i < n; i++) { if (vis[i]) continue; csize = 0; make_bcc(i); ans += csize*(csize-1)*(csize-2); make_ans(i); } cout << ans << "\n"; }
#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...