제출 #973867

#제출 시각아이디문제언어결과실행 시간메모리
973867dubabuba철인 이종 경기 (APIO18_duathlon)C++14
0 / 100
1052 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; typedef long long i64; typedef pair<int, int> pii; #define ff first #define ss second #define MP make_pair const int mxn = 2e5 + 10; vector<int> adj[mxn]; vector<pii> edges; i64 kv_sum[mxn]; int col[mxn]; i64 sum_kv[mxn]; int chi[mxn]; int n, m; int colour(int u) { if(col[u] < 0) return u; return col[u] = colour(col[u]); } bool unite(int u, int v) { u = colour(u); v = colour(v); if(u == v) return 0; if(col[u] > col[v]) swap(u, v); col[u] += col[v]; col[v] = u; return 1; } bool vis[mxn]; void dfs_build(int u, int par) { vis[u] = 1; for(int v : adj[u]) { if(v == par) continue; dfs_build(v, u); chi[u] += chi[v]; kv_sum[u] += chi[v] * chi[v]; sum_kv[u] += chi[v]; } sum_kv[u] *= sum_kv[u]; chi[u]++; } i64 ans = 0; void dfs_solve(int u, int par) { vis[u] = 1; for(int v : adj[u]) { if(v == par) continue; dfs_solve(v, u); } i64 t = sum_kv[u] * sum_kv[u] - kv_sum[u] * kv_sum[u]; ans += t / 2; i64 total = -col[colour(u)]; i64 s = total - chi[u]; i64 f = chi[u] - 1; ans += s * f; // cout << u << ": " << t << ", " << s << ' ' << f << endl; } int main() { cin >> n >> m; memset(col, -1, sizeof col); for(int i = 0; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); unite(u, v); } for(int u = 1; u <= n; u++) if(!vis[u]) dfs_build(u, u); memset(vis, 0, sizeof vis); for(int u = 1; u <= n; u++) if(!vis[u]) dfs_solve(u, u); cout << 2 * ans << endl; 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...