제출 #1150921

#제출 시각아이디문제언어결과실행 시간메모리
1150921gygSplit the Attractions (IOI19_split)C++20
18 / 100
54 ms14692 KiB
#include "split.h" #include <bits/stdc++.h> using namespace std; #define sig signed #define int long long #define arr array #define vec vector #define pii pair<int, int> #define fir first #define sec second const int N = 1e5 + 5; int n, a, b, c; arr<vec<int>, N> adj; arr<bool, N> vs; vec<int> ord; void dfs(int u) { vs[u] = true, ord.push_back(u); for (int v : adj[u]) if (!vs[v]) dfs(v); } arr<int, N> ans; vec<sig> find_split(sig _n, sig _a, sig _b, sig _c, vec<sig> _u, vec<sig> _v) { n = _n, a = _a, b = _b, c = _c; for (int i = 0; i < _u.size(); i++) { int u = _u[i] + 1, v = _v[i] + 1; adj[u].push_back(v), adj[v].push_back(u); } vec<pii> srt = {{a, 1}, {b, 2}, {c, 3}}; sort(srt.begin(), srt.end()); a = srt[0].fir, b = srt[1].fir, c = srt[2].fir; int st = 1; for (int u = 1; u <= n; u++) if (adj[u].size() == 1) st = u; dfs(st); for (int i = 0; i < ord.size(); i++) { if (i < a) ans[ord[i]] = 1; else if (i < a + b) ans[ord[i]] = 2; else ans[ord[i]] = 3; } vec<sig> rsp; for (int u = 1; u <= n; u++) rsp.push_back(srt[ans[u] - 1].sec); return rsp; }
#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...