Submission #440036

#TimeUsernameProblemLanguageResultExecution timeMemory
440036KULIKOLDDuathlon (APIO18_duathlon)C++17
31 / 100
180 ms22212 KiB
//#pragma GCC optimize ("O3") #include <bits/stdc++.h> using namespace std; typedef long long ll; #define endl '\n' const int DIM = 1E5+7; const int INF = 1E9; vector<int> G[DIM],NG[DIM]; int tmin[DIM],tin[DIM],timer = 0,ptr = 0,P[DIM],vis[DIM],sub[DIM]; ll dp[DIM]; int F(int x){ return x==P[x]?x:P[x] = F(P[x]); } void unite(int a,int b){ a = F(a); b = F(b); P[a] = b; } int fcmp(int v,int par){ tin[v] = tmin[v] = ++timer; for(auto to:G[v]){ if (to==par) continue; if (tin[to]==0) { fcmp(to,v); if (tmin[to]<=tin[v]) unite(to,v); tmin[v] = min(tmin[to],tmin[v]); } else tmin[v] = min(tin[to],tmin[v]); } return 1; } ll res = 0,ans = 0; vector<int> V[DIM]; void dfs(int v){ vis[v] = 1; int sz = int(V[v].size()); dp[v] = ll(sz-1)*(sz-2) + sz - 1; ans+=ll(sz)*(sz-1)*(sz-2); sub[v] = sz; for(int ver:V[v]){ int su = 0; for(int vto:G[ver]){ int to = F(vto); if (to==v || vis[to]) continue; dfs(to); res+=dp[to]*sub[v]+dp[v]*sub[to]; dp[v] = dp[v]+dp[to]+sub[to]; sub[v]+=sub[to]; su+=sub[to]; } dp[v]+=ll(sz-1)*su; } /*for(auto to:G[v]){ if (vis[to]) continue; dfs(to); res+=dp[to]*sub[v]+dp[v]*sub[to]; dp[v] = dp[v]+dp[to]+sz*sub[to]; sub[v]+=sub[to]; }*/ } int solve(){ int n,m; cin>>n>>m; for(int i = 1;i<=n;++i) P[i] = i; for(int i = 1;i<=m;++i){ ll u,v; cin>>u>>v; G[u].push_back(v); G[v].push_back(u); } for(int i = 1;i<=n;++i){ if (!tin[i]) { fcmp(i, i); } } for(int i = 1;i<=n;++i){ V[F(i)].push_back(i); } for(int i = 1;i<=n;++i){ if (!V[i].empty() && !vis[i]) dfs(i); } cout<<res*2+ans<<endl; return 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); return 0; }
#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...