Submission #723195

#TimeUsernameProblemLanguageResultExecution timeMemory
723195LittleCubeSplit the Attractions (IOI19_split)C++14
18 / 100
2083 ms23400 KiB
#include "split.h" #include <bits/stdc++.h> #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define F first #define S second using namespace std; int N, M, dsu[100000], rk[100000], pre[100000], vis[100000], s[100000]; vector<pii> sz; vector<int> sol; vector<int> E[100000], F[100000]; int find(int k) { return k == dsu[k] ? k : dsu[k] = find(dsu[k]); } void merge(int x, int y) { rk[x] += rk[y]; dsu[y] = x; } void dfs(int u) { s[u] = 1; for (auto v : F[u]) if (v != pre[u]) { pre[v] = u; dfs(v); s[u] += s[v]; } } void construct(int u, int &cnt, int color) { if (cnt > 0) cnt--, sol[u] = color; for (auto v : F[u]) if (!vis[v]) { vis[v] = 1; construct(v, cnt, color); } } mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { N = n, M = p.size(); sz.emplace_back(pii(a, 1)); sz.emplace_back(pii(b, 2)); sz.emplace_back(pii(c, 3)); sort(sz.begin(), sz.end()); a = sz[0].F, b = sz[1].F; vector<int> order; for (int i = 0; i < M; i++) E[p[i]].emplace_back(q[i]), E[q[i]].emplace_back(p[i]), order.emplace_back(i); sol = vector<int>(N, sz[2].S); int t = 4000; while (t--) { for (int i = 0; i < N; i++) { dsu[i] = i, rk[i] = 1; F[i].clear(); } shuffle(order.begin(), order.end(), rd); for (int i : order) { int u = find(p[i]), v = find(q[i]); if (u == v) continue; merge(u, v); F[p[i]].emplace_back(q[i]); F[q[i]].emplace_back(p[i]); } dfs(0); for (int i = 1; i < N; i++) { if (s[i] >= a && n - s[i] >= b) { vis[i] = vis[pre[i]] = 1; construct(i, a, sz[0].S); construct(pre[i], b, sz[1].S); return sol; } else if (s[i] >= b && n - s[i] >= a) { vis[i] = vis[pre[i]] = 1; construct(i, b, sz[1].S); construct(pre[i], a, sz[0].S); return sol; } } } return vector<int>(N, 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...