Submission #1320419

#TimeUsernameProblemLanguageResultExecution timeMemory
1320419madamadam3Thousands Islands (IOI22_islands)C++20
22.75 / 100
73 ms13676 KiB
#include "islands.h" #include <bits/stdc++.h> using namespace std; using vi = vector<int>; using pi = pair<int, int>; int n, m; vector<vi> adj; vi istate; struct DSU { int n; vector<int> par; DSU(int N = 0) : n(N), par(N) {iota(par.begin(), par.end(), 0);} int find(int v) {return par[v] == v ? v : par[v] = find(par[v]);} void unite(int a, int b) {if (find(b) != find(a)) par[find(b)] = find(a);} }; variant<bool, vi> find_journey(int N, int M, vi U, vi V) { n = N; m = M; istate.assign(n, 0); adj.resize(n); map<pi, int> ec; vi deg(n), indeg(n); for (int i = 0; i < m; i++) { ec[{U[i], V[i]}]++; deg[U[i]]++; indeg[V[i]]++; adj[U[i]].push_back(i); // adj[V[i]].push_back(i); } int x = 0, p = -1; vector<int> pre, maneuver; set<int> vis; vis.insert(0); if (deg[0] == 0) return false; if (deg[0] < 2) { pre.push_back(adj[0][0]); x = V[adj[0][0]]; p = 0; while (deg[x] < 3) { vis.insert(x); int y = -1; for (auto e : adj[x]) if (!vis.count(V[e])) {y = e; break;} if (y == -1) return false; pre.push_back(y); x = V[y]; } } if (deg[x] <= (x == 0 ? 1 : 2)) return false; int a = -1, b = -1, c = -1, d = -1; for (auto e : adj[x]) { if (vis.count(V[e])) continue; if (a == -1) a = e; else if (c == -1) c = e; } if (a%2 == 0) b = a+1; else b = a-1; if (c%2 == 0) d = c+1; else d = c-1; // cout << x << "\n"; // cout << a << " " << b << " " << c << " " << d << "\n"; if (a < 0 || b < 0 || c < 0 || d < 0) return false; maneuver.assign({a,b,c,d,b,a,d,c}); vector<int> post = pre; reverse(post.begin(), post.end()); for (auto &el : maneuver) pre.push_back(el); for (auto &el : post) pre.push_back(el); return pre; }
#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...