Submission #1061983

#TimeUsernameProblemLanguageResultExecution timeMemory
1061983AlperenT_Duathlon (APIO18_duathlon)C++17
100 / 100
99 ms60104 KiB
#include <bits/stdc++.h> #pragma GCC optimize("unroll-loops","O3") #define pb push_back #define F first #define S second #define all(a) a.begin(),a.end() #define pii pair <int,int> #define ld long double #define int long long #define sz(v) (int)v.size() #define rep(i , a , b) for(int i=a;i <= b;i++) #define per(i, a , b) for(int i=a;i >= b;i--) using namespace std ; const int maxn = 5e5 + 10 , maxq = 1e5 , lg = 22 , sq = 333 , inf = 1e9 +100 , maxk = 2022 , mod = 998244353; int n ,m ,ans = 0 , c =0 , dis[maxn] , cnt , mx[maxn] , m1[maxn] , m2[maxn] ,w[maxn], sb[maxn] ; vector <int >G[maxn] ; vector <int> st , N[maxn] ; void d1(int v , int p =0 ){ c+= (v<=n) ;; m1[v] =1 ; for(int u : N[v]){ if(u == p)continue ; d1(u,v) ; } } void add(int v, int u){ N[v].pb(u) ; N[u].pb(v) ; } void d2(int v){ m2[v] = 1 ; mx[v] = dis[v] ; for(int u : G[v]){ if(m2[u] == 1){ mx[v] = min(mx[v] , dis[u]) ; continue ; } int ls = st.back() ; dis[u] = dis[v] + 1; d2(u) ; mx[v] = min(mx[v] ,mx[u]) ; if(mx[u] == dis[v]){ add(cnt ,v) ; while(st.back() != ls){ add(cnt , st.back()) ; st.pop_back() ; } cnt++ ; } } st.pb(v) ; } void dfs(int v ,int p =0){ sb[v] = (v <= n) ; for(int u : N[v]){ if(u == p)continue ; dfs(u ,v) ; sb[v] += sb[u] ; } int sm =0 ; sm += c*(c-1)/2 ; for(int u : N[v]){ if(u == p){ int x = c-sb[v] ; sm-= x*(x-1)/2 ; }else{ sm -= sb[u]*(sb[u]-1)/2 ; } } ans += sm * w[v] ; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m ; cnt = n+1 ; rep(i,1,m){ int v , u ; cin >> v >> u ; G[v].pb(u) ; G[u].pb(v) ; } st.pb(0) ; rep(i ,1, n){ if(m2[i] == 1)continue ; d2(i) ; } rep(i ,1 ,2*n){ if(i <= n)w[i] = -1 ; else w[i] = sz(N[i]) ; } rep(i ,1 ,2*n){ if(m1[i] == 1)continue ; c =0 ; d1(i) ; if(c == 0)continue ; dfs(i) ; } cout << ans*2 << "\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...