Submission #762796

#TimeUsernameProblemLanguageResultExecution timeMemory
762796vjudge1Fun Tour (APIO20_fun)C++17
26 / 100
10 ms400 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "C:\GCC\debug.h" #else #define debug(...) void(42) #endif /* int hoursRequired(int X, int Y) { cout << X << " " << Y << endl; int p; cin >> p; return p; } */ int hoursRequired(int X, int Y); int attractionsBehind(int X, int Y); vector<int> createFunTour(int N, int Q) { int n = N; vector<vector<int>> adj(n); bool isBinaryTree = false; if (n <= 500) { for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (hoursRequired(i, j) == 1) { adj[i].push_back(j); adj[j].push_back(i); } } } } else { isBinaryTree = true; vector<int> par(n, -1); for (int i = 1; i < n; i++) { int x = i; int y = (i - 1) / 2; adj[y].push_back(x); par[x] = y; } for (int i = 0; i < n; i++) { sort(adj[i].begin(), adj[i].end()); } function<int(int)> GrabLeft = [&](int u) { int ret = u; for (auto v : adj[u]) { ret = GrabLeft(v); break; } return ret; }; function<int(int)> GrabRight = [&](int u) { int ret = u; for (int i = (int) adj[u].size() -1; i >= 0; i--) { int v = adj[u][i]; ret = GrabRight(v); break; } return ret; }; vector<int> perm; for (int it = 0; ; it++) { if (it % 2 == 0) { int nxt = GrabLeft(0); perm.push_back(nxt); if (par[nxt] > -1) { auto ptr = find(adj[par[nxt]].begin(), adj[par[nxt]].end(), nxt); adj[par[nxt]].erase(ptr); } } else { int nxt = GrabRight(0); perm.push_back(nxt); if (par[nxt] > -1) { auto ptr = find(adj[par[nxt]].begin(), adj[par[nxt]].end(), nxt); adj[par[nxt]].erase(ptr); } } if ((int) perm.size() == n) { break; } } return perm; } vector<bool> block(n); auto findFarthest = [&](int x) { vector<int> d(n, -1); d[x] = 0; queue<int> que; que.push(x); while (!que.empty()) { auto u = que.front(); que.pop(); for (auto v : adj[u]) { if (d[v] == -1 && !block[v]) { d[v] = d[u] + 1; que.push(v); } } } return max_element(d.begin(), d.end()) - d.begin(); }; int p = findFarthest(0); vector<int> perm; perm.push_back(p); block[p] = true; while ((int) perm.size() < n) { int nxt = findFarthest(p); block[nxt] = true; perm.push_back(nxt); swap(p, nxt); } return perm; } /* int main() { ios::sync_with_stdio(false); cin.tie(0); return 0; } */

Compilation message (stderr)

fun.cpp: In function 'std::vector<int> createFunTour(int, int)':
fun.cpp:28:8: warning: variable 'isBinaryTree' set but not used [-Wunused-but-set-variable]
   28 |   bool isBinaryTree = false;
      |        ^~~~~~~~~~~~
#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...