Submission #265102

#TimeUsernameProblemLanguageResultExecution timeMemory
265102extraterrestrialDuathlon (APIO18_duathlon)C++14
23 / 100
95 ms14600 KiB
#include <bits/stdc++.h> typedef long long ll; typedef long double ld; using namespace std; #define F first #define S second #define pb push_back #define all(x) (x).begin(), (x).end() #define SZ(x) (int)(x).size() //#define int ll const int N = 1e5 + 10; vector<int> g[N]; bool used[N]; int sz[N], root[N], pr[N]; void dfs(int v, int rt) { used[v] = true; sz[v] = 1; root[v] = rt; for (auto u : g[v]) { if (!used[u]) { pr[u] = v; dfs(u, rt); sz[v] += sz[u]; } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } for (int i = 1; i <= n; i++) { if (!used[i]) { dfs(i, i); } } ll ans = 0; for (int v = 1; v <= n; v++) { for (auto u : g[v]) { if (u == pr[v]) { ans += (sz[root[v]] - sz[v]) * 1ll * (sz[v] - 1); } else { ans += sz[u] * 1ll * (sz[root[v]] - sz[u] - 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...