Submission #1320386

#TimeUsernameProblemLanguageResultExecution timeMemory
1320386madamadam3Thousands Islands (IOI22_islands)C++20
0 / 100
1094 ms8208 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); for (int i = 0; i < m; i++) { ec[{U[i], V[i]}]++; deg[U[i]]++; adj[U[i]].push_back(i); // adj[V[i]].push_back(i); } int x = 0, p = -1; vector<int> pre, maneuver; while (deg[x] == 1) { x = U[adj[x][0]] == x ? V[adj[x][0]] : U[adj[x][0]]; } if (deg[x] == 0) return false; int a = adj[x][0], b = -1, c = adj[x][1], d = -1; if (a%2 == 0) b = a+1; else b = a-1; if (c%2 == 0) d = c+1; else d = c-1; 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...