Submission #790314

#TimeUsernameProblemLanguageResultExecution timeMemory
790314Dan4LifeDuathlon (APIO18_duathlon)C++17
0 / 100
731 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ar = array<int,2>; const int mxN = (int)1e3+10; int n, m, VV[mxN]; vector<int> adj[mxN]; int sub[mxN], totsq[mxN],xd=0; void dfs(int s, int p){ VV[s]=1; sub[s]=1; totsq[s]=0; for(auto u : adj[s]){ if(u==p) continue; dfs(u,s); sub[s]+=sub[u]; totsq[s]+=sub[u]*sub[u]; } } void reroot(int s, int u, bool chk=1){ totsq[s]-=sub[u]*sub[u]; totsq[u]+=(n-sub[u])*(n-sub[u]); sub[s]-=sub[u]; sub[u]+=sub[s]; if(chk) xd+=totsq[u]; } void dfs2(int s, int p){ for(auto u : adj[s]){ if(u==p) continue; reroot(s,u); dfs2(u,s); reroot(u,s,0); } } int solve(int s){ dfs(s,-1); xd = totsq[s]; int tot = sub[s]; dfs2(s,-1); return tot*(tot-1)*(tot-1)-xd; } int32_t main() { cin >> n >> m; int ans = 0; for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; adj[a].pb(b), adj[b].pb(a); } for(int i = 1; i <= n; i++) if(!VV[i]) ans+=solve(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...