제출 #1242788

#제출 시각아이디문제언어결과실행 시간메모리
1242788domi이상적인 도시 (IOI12_city)C++20
0 / 100
4 ms1088 KiB
#include<bits/stdc++.h> using namespace std; const int64_t MOD = 1e9; int64_t n, ans; void dfs(int nod, int p, vector<vector<int64_t>>& T, vector<int64_t>& SZ, vector<int64_t>& s) { SZ[nod] = s[nod] - 1; for (auto &son : T[nod]) { if (son == p) continue; dfs(son, nod, T, SZ, s); SZ[nod] += SZ[son]; ans += (n - SZ[son]) * SZ[son]; } } int64_t solve(map<int64_t, vector<int64_t>>& mp) { vector<vector<int64_t>>T; map<pair<int64_t, int64_t>, int64_t>id; vector<int64_t>s; int64_t cnt = 0, idx = 0; for (auto [x, v] : mp){ sort(v.begin(), v.end()); for (int i=0; i<v.size(); i++){ if (i == 0 || v[i] != v[i - 1] + 1){ cnt++; s.push_back(0); T.push_back({}); } id[{x, v[i]}] = cnt; s.back()++; if (x != mp.begin()->first){ if (id.find({x-1, v[i]}) != id.end() && (T[cnt].empty() || id[{x-1, v[i]}] != T[cnt].back())){ T[cnt].push_back(id[{x - 1, v[i]}]); T[id[{x - 1, v[i]}]].push_back(cnt); } } } } vector<int64_t>SZ(cnt + 1, 0); ans = 0; // dfs(0, -1, T, SZ, s); return ans; } int DistanceSum(int N, int *X, int *Y) { n = N; map<int64_t, vector<int64_t>>lin, col; for (int64_t i = 0; i < N; ++i) { col[X[i]].push_back(Y[i]); lin[Y[i]].push_back(X[i]); } return solve(lin) + solve(col); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...