Submission #439903

#TimeUsernameProblemLanguageResultExecution timeMemory
439903AmShZIdeal city (IOI12_city)C++98
Compilation error
0 ms0 KiB
//khodaya khodet komak kon # include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair <int, int> pii; typedef pair <pii, int> ppi; typedef pair <int, pii> pip; typedef pair <pii, pii> ppp; typedef pair <ll, ll> pll; # define A first # define B second # define endl '\n' # define sep ' ' # define all(x) x.begin(), x.end() # define kill(x) return cout << x << endl, 0 # define SZ(x) int(x.size()) # define lc id << 1 # define rc id << 1 | 1 # define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0); ll power(ll a, ll b, ll md) {return (!b ? 1 : (b & 1 ? a * power(a * a % md, b / 2, md) % md : power(a * a % md, b / 2, md) % md));} const int xn = 1e5 + 10; const int xm = - 20 + 10; const int sq = 320; const int inf = 1e9 + 10; const ll INF = 1e18 + 10; const ld eps = 1e-15; const int mod = 1e9;// + 7;//998244353; const int base = 257; int n, par[xn], P[xn], sz[xn], dsu[xn], H[xn]; pii a[xn]; ll ans; map <pii, int> mp; vector <int> adj[xn], vec[xn]; vector <pii> E, G[2][xn]; bool mark[xn]; int get_root(int v){ if (v == par[v]) return v; return par[v] = get_root(par[v]); } void merge(int v, int u){ v = get_root(v); u = get_root(u); par[u] = v; dsu[v] += dsu[u]; } void preDFS(int v){ mark[v] = true; for (int u : adj[v]){ if (mark[u]){ if (H[v] <= H[u] + 1) continue; int res = v; while (get_root(res) != get_root(u)){ res = get_root(res); merge(P[res], res); } continue; } P[u] = v; H[u] = H[v] + 1; preDFS(u); } } void add_edge(int v, int u){ adj[v].push_back(u); adj[u].push_back(v); E.push_back({v, u}); } bool cmp1(int v, int u){ return a[v].A < a[u].A; } bool cmp2(int v, int u){ return a[v].B < a[u].B; } void DFS(int v, int id, int p = - 1){ sz[v] = 1; for (pii U : G[id][v]){ int u = U.A, w = U.B; if (u == p) continue; DFS(u, id, v); ans += 1ll * w * sz[u] % mod * (n - sz[u]) % mod; ans %= mod; sz[v] += sz[u]; } } ll DistanceSum(int N, vector <int> X, vector <int> Y){ n = N; ans = 0; mp.clear(), E.clear(); for (int i = 1; i <= n; ++ i){ adj[i].clear(), vec[i].clear(); G[0][i].clear(), G[1][i].clear(); H[i] = mark[i] = 0; } for (int i = 1; i <= n; ++ i) a[i] = {X[i - 1], Y[i - 1]}, mp[a[i]] = i; for (int i = 1; i <= n; ++ i){ int x = a[i].A, y = a[i].B; if (mp[{x - 1, y}]) add_edge(i, mp[{x - 1, y}]); if (mp[{x, y - 1}]) add_edge(i, mp[{x, y - 1}]); par[i] = i, dsu[i] = 1; } preDFS(1); for (int i = 1; i <= n; ++ i) vec[get_root(i)].push_back(i); for (pii e : E){ int v = e.A, u = e.B, pv, pu; pv = get_root(v); pu = get_root(u); if (pv == pu) continue; G[0][v].push_back({u, 1}); G[0][u].push_back({v, 1}); G[1][v].push_back({u, 0}); G[1][u].push_back({v, 0}); } for (int i = 1; i <= n; ++ i){ if (i != get_root(i)) continue; sort(all(vec[i]), cmp1); for (int j = 1; j < SZ(vec[i]); ++ j){ int v = vec[i][j], u = vec[i][j - 1]; G[0][v].push_back({u, (a[v].A - a[u].A)}); G[0][u].push_back({v, (a[v].A - a[u].A)}); } sort(all(vec[i]), cmp2); for (int j = 1; j < SZ(vec[i]); ++ j){ int v = vec[i][j], u = vec[i][j - 1]; G[1][v].push_back({u, (a[v].B - a[u].B)}); G[1][u].push_back({v, (a[v].B - a[u].B)}); } } for (int i = 0; i < 2; ++ i) DFS(1, i); return ans / 2; } /* int main(){ //InTheNameOfGod; cout << DistanceSum(11, {2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5}, {5, 6, 3, 6, 3, 4, 5, 6, 3, 4, 6}) << endl; return 0; } */

Compilation message (stderr)

/usr/bin/ld: /tmp/cc7pO3w0.o: in function `main':
grader.cpp:(.text.startup+0x104): undefined reference to `DistanceSum(int, int*, int*)'
collect2: error: ld returned 1 exit status