제출 #1290766

#제출 시각아이디문제언어결과실행 시간메모리
1290766kahoulSplit the Attractions (IOI19_split)C++20
18 / 100
52 ms14232 KiB
#include "split.h" using namespace std; const int maxn = 2e5 + 10; vector<int> rel[maxn]; int deg[maxn]; vector<int> res(maxn, 3); vector<bool> used(maxn, 0); int a, b, c; int needed = 0; int amt = 0; void dfs (int u, int color) { if (amt == needed) return; used[u] = 1; res[u] = color; amt++; for (auto v: rel[u]) { if (used[v]) continue; if (amt == needed) return; dfs(v, color); } } vector<int> find_split(int n, int A, int B, int C, vector<int> p, vector<int> q) { a = A; b = B; c = C; for (int i = 0; i < p.size(); i++) { int u = p[i]; int v = q[i]; rel[u].push_back(v); rel[v].push_back(u); deg[u]++; deg[v]++; } int min_deg = maxn; for (int i = n - 1; i >= 0; i--) { min_deg = min(min_deg, deg[i]); } for (int i = n - 1; i >= 0; i--) { if (deg[i] == min_deg) { amt = 0; needed = a; dfs(i, 1); break; } } for (int i = n - 1; i >= 0; i--) { if (!used[i]) { amt = 0; needed = b; dfs(i, 2); break; } } vector<int> ans; for (int i = 0; i < n; i++) { ans.push_back(res[i]); } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...