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...