Submission #1279217

#TimeUsernameProblemLanguageResultExecution timeMemory
1279217PlayVoltzDuathlon (APIO18_duathlon)C++20
100 / 100
104 ms28328 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> #include <random> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second int n, counter=1, ans=0, tsz=0, bcc=0; vector<int> disc, low, sz; vector<vector<int> > graph, fgraph; stack<int> st; void dfs(int node, int p){ ++tsz; disc[node]=low[node]=counter++; st.push(node); for (auto num:graph[node])if (num!=p){ if (disc[num])low[node]=min(low[node], disc[num]); else{ dfs(num, node); low[node]=min(low[node], low[num]); if (low[num]>=disc[node]){ ++bcc; fgraph[node].pb(n+bcc); while (fgraph[n+bcc].empty()||fgraph[n+bcc].back()!=num)fgraph[n+bcc].pb(st.top()), st.pop(); } } } } void dfs2(int node){ if (node<=n)sz[node]=1; for (auto num:fgraph[node]){ dfs2(num); sz[node]+=sz[num]; if (node>n)ans-=fgraph[node].size()*sz[num]*(sz[num]-1); } if (node>n)ans-=fgraph[node].size()*(tsz-sz[node])*(tsz-sz[node]-1); } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int m, a, b; cin>>n>>m; graph.resize(n+1); fgraph.resize(2*n+2); disc.resize(n+1, 0); low.resize(n+1); sz.resize(2*n+2, 0); while (m--){ cin>>a>>b; graph[a].pb(b); graph[b].pb(a); } for (int i=1; i<=n; ++i)if (!disc[i]){ tsz=0; dfs(i, 1); ans+=tsz*(tsz-1)*(tsz-2); dfs2(i); } 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...