Submission #1256981

#TimeUsernameProblemLanguageResultExecution timeMemory
1256981MisterReaperIsland Hopping (JOI24_island)C++20
65 / 100
4 ms532 KiB
#include <bits/stdc++.h> #include "island.h" using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif namespace { int N; } std::map<std::pair<int, int>, int> save; int ask(int v, int k) { assert(0 <= v && v < N && 1 <= k && k < N); if (save.contains({v, k})) { return save[{v, k}]; } return save[{v, k}] = query(v + 1, k) - 1; } void solve(int N, int L) { ::N = N; // int variable_example = query(1, 1); // for (int i = 2; i <= N; i++) { // answer(1, i); // } std::vector<int> vis(N), lst(N, -1); std::vector<int> cur(N, 1), par(N, -1); std::vector<std::map<int, int>> idx(N); std::vector<int> stk {0}; std::vector<std::pair<int, int>> ans; vis[0] = true; while (ans.size() != N - 1) { int v = stk.back(); debug(stk); if (cur[v] == N) { stk.pop_back(); continue; } debug(v, cur[v]); int u = ask(v, cur[v]); idx[v][u] = cur[v]; cur[v]++; debug(u); if (u < lst[v]) { stk.pop_back(); continue; } else if (vis[u]) { if (u == par[v]) { continue; } else { debug("pop", v); stk.pop_back(); continue; } } else if (v != 0) { // check is it connected to me? int p = par[v], stp = cur[u]; while (!idx[u].contains(p) && !idx[u].contains(v)) { int x = ask(u, cur[u]); debug(u, cur[u], x); idx[u][x] = cur[u]; cur[u]++; } cur[u] = stp; if (idx[u].contains(v) && idx[u].contains(p)) { if (idx[u][p] < idx[u][v]) { debug("leaf", v); stk.pop_back(); continue; } } else if (idx[u].contains(p)) { debug("leaf", v); stk.pop_back(); continue; } } debug(v, u); vis[u] = true; par[u] = v; lst[v] = u; ans.emplace_back(v, u); stk.emplace_back(u); } for (auto[u, v] : ans) { answer(u + 1, v + 1); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...