Submission #1197664

#TimeUsernameProblemLanguageResultExecution timeMemory
1197664Hamed_GhaffariIdeal city (IOI12_city)C++20
100 / 100
120 ms14228 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define X first #define Y second const int MXN = 1e5+5, MOD = 1e9; int n; pii a[MXN]; int N, w[MXN]; vector<int> g[MXN]; map<pii, int> cmp; int ans; void dfs(int v, int p=-1) { for(int u : g[v]) if(u!=p) { dfs(u, v); w[v] += w[u]; (ans += 1ll*w[u]*(n-w[u])%MOD) %= MOD; } } void solve() { sort(a, a+n); for(int i=0, j; i<n;) { j=i; while(j+1<n && a[j+1].X==a[i].X && a[j+1].Y==a[j].Y+1) j++; for(int k=i; k<=j; k++) w[cmp[a[k]] = N]++; N++; i = j+1; } pii lst = {-1, -1}, cur; for(int i=0; i<n; i++) if(cmp.find({a[i].X-1, a[i].Y})!=cmp.end()) { cur = {cmp[{a[i].X-1, a[i].Y}], cmp[a[i]]}; if(lst!=cur) { g[cur.X].push_back(cur.Y); g[cur.Y].push_back(cur.X); lst = cur; } } dfs(0); for(int i=0; i<N; i++) { w[i] = 0; g[i].clear(); } cmp.clear(); N = 0; } int DistanceSum(int n, int *A, int *B) { ::n = n; for(int i=0; i<n; i++) a[i] = {A[i], B[i]}; solve(); for(int i=0; i<n; i++) swap(a[i].X, a[i].Y); solve(); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...