Submission #1208930

#TimeUsernameProblemLanguageResultExecution timeMemory
1208930i_love_springCountries (BOI06_countries)C++20
100 / 100
57 ms16456 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array struct DSU { vector<int>v; DSU(int n) : v(n + 1, -1){} int find(int x){ int y = x; while (v[x] > 0) x = v[x]; while (x != y) y = exchange(v[y],x); return x; } bool unite(int x,int y) { x = find(x); y = find(y); if (x == y) return false; if (v[x] > v[y]) swap(x,y); v[x] += v[y]; v[y] = x; return true; } }; ll dist(int x,int y,int x1,int y1) { return (1ll * (x - x1) * (x - x1)) +( 1ll * (y - y1) * (y - y1)); } void solve() { int n; cin >> n; vector<ar<int,3>>a(n); for (int i = 0; i < n;i++) cin >> a[i][0] >> a[i][1] >> a[i][2]; vector<int> ans(n,0),used(n,0); vector<vector<ar<ll,2>>> v(n); vector<vector<int>> adj(n); for (int i = 0; i < n;i++) { bool ok = 0; ll id = 0,lsd = 1e9; for (int j = 0; j < n;j++) { if (i == j)continue; ll d = dist(a[i][0],a[i][1],a[j][0],a[j][1]); v[i].push_back({a[j][2] - a[i][2] * d,j}); if (a[j][2] * lsd > a[id][2] * d) { ok = 0; id = j; lsd = d; } else if (a[j][2] * lsd == a[id][2] * d) { ok = 1; } } sort(v[i].rbegin(),v[i].rend()); if (v[i].front()[0] <= 0) ans[i] = -2; else if (ok) ans[i] = -1; else { adj[id].push_back(i); } } function<void(int,int)> dfs = [&](int u,int p) { ans[u] = ans[p]; used[u] = 1; for (int v : adj[u]) { if (v != p) dfs(v,u); } }; for (int i= 0; i < n;i++) { if (ans[i] != 0 && used[i] == 0) { // cerr << i << " "; int tmp = ans[i]; ans[i] = i; dfs(i,i); ans[i] = tmp; } } for (int i = 0; i < n;i++) { if (ans[i] == -2) cout <<"K\n"; else if (ans[i] == -1) cout << "D\n"; else cout << ans[i] + 1<< "\n"; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); cout << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...