제출 #723182

#제출 시각아이디문제언어결과실행 시간메모리
723182LittleCubeSplit the Attractions (IOI19_split)C++17
0 / 100
471 ms1048576 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]; void dfs(int u) { s[u] = 1; for (auto v : E[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 : E[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; for (int i = 0; i < M; i++) E[p[i]].emplace_back(q[i]), E[q[i]].emplace_back(p[i]); dfs(0); sol = vector<int>(N, sz[2].S); 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] >= a && n - s[i] >= b) { 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...