Submission #742126

#TimeUsernameProblemLanguageResultExecution timeMemory
742126speedyArdaDuathlon (APIO18_duathlon)C++14
8 / 100
697 ms1048576 KiB
#include "bits/stdc++.h" using namespace std; const int MAXN = 1e5+5; vector< vector<int> > adj(MAXN); bool visited[MAXN]; long long sz[MAXN]; long long add[MAXN]; int n, m; pair<long long, bool> subtask3(int v, int p) { pair<long long, bool> ans = {1, false}; visited[v] = true; for(int e : adj[v]) { if(e == p) continue; if(visited[e]) { ans.second = true; continue; } pair<long long, bool> temp = subtask3(e, v); ans.first += temp.first; ans.second |= temp.second; } return ans; } long long subtask5(int v, int p) { long long ans = 0; visited[v] = true; sz[v] = 1; long long chi_size = 0; for(int e : adj[v]) { if(e == p) continue; ans += subtask5(e, v); sz[v] += sz[e]; chi_size += sz[e]; } long long par_size = n - chi_size - 1; ans += par_size * chi_size; for(int e : adj[v]) { if(e == p) continue; ans += sz[e] * ((long long)n - sz[e] - 1LL); } return ans; } int main() { long long temp = 0; add[0] = 0; for(long long i = 1; i < MAXN; i++) { temp += i; add[i] = add[i - 1] + temp; } cin >> n >> m; for(int i = 1; i <= m; i++) { int f, s; cin >> f >> s; adj[f].push_back(s); adj[s].push_back(f); } int max_size = 0; for(int i = 1; i <= n; i++) { max_size = max(max_size, (int)adj[i].size()); } long long ans = 0; if(max_size <= 2) // Subtask 3 { for(int i = 1; i <= n; i++) { if(visited[i]) continue; pair<long long, bool> curr = subtask3(i, -1); if(curr.second) { ans += curr.first * (curr.first - 1) * (curr.first - 2); } else if(curr.first >= 3) { ans += add[curr.first - 2] * 2LL; } } } else { for(int i = 1; i <= n; i++) { if(visited[i]) continue; ans += subtask5(i, -1); } } 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...