Submission #1051209

#TimeUsernameProblemLanguageResultExecution timeMemory
1051209TrentThousands Islands (IOI22_islands)C++17
22.75 / 100
24 ms6492 KiB
#include "islands.h" #include "bits/stdc++.h" using namespace std; #define forR(i, x) for(int i = 0; i < (x); ++i) #define REP(i, a, b) for(int i = (a); i < (b); ++i) #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<ll> vll; typedef vector<bool> vb; struct edge{int t, i;}; vector<vector<edge>> adj; vi nStk, eStk; vb vis; bool dfs(int c, vi& ans) { // nStk is [0, c), eStk is [0, c] if(adj[c].size() > 2) { for(int i : eStk) ans.push_back(i); vi use; forR(i, 3) if(adj[c][i].t != nStk.back()) use.push_back(adj[c][i].i); int a=use[0], b=use[1]; vector<int> toAdd = {a, a ^ 1, b, b ^ 1, a ^ 1, a, b ^ 1, b}; for(int i : toAdd) ans.push_back(i); for(int i = (int) eStk.size() - 1; i >= 0; --i) ans.push_back(eStk[i]); return true; } vis[c] = true; nStk.push_back(c); for(auto [t, i] : adj[c]) if(t != nStk.back() && !vis[t]) { eStk.push_back(i); if(dfs(t, ans)) return true; eStk.pop_back(); } nStk.pop_back(); return false; } std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) { adj.resize(N); forR(i, M) { adj[U[i]].push_back({V[i], i}); } if(adj[0].size() >= 2) { int a=adj[0][0].i, b=adj[0][1].i; return vector<int>{a, a ^ 1, b, b ^ 1, a ^ 1, a, b ^ 1, b}; } else if(adj[0].size() >= 1) { vis.resize(N); vi ans; bool done = dfs(0, ans); if(done) return ans; } return 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...