Submission #1368317

#TimeUsernameProblemLanguageResultExecution timeMemory
1368317avighnaThousands Islands (IOI22_islands)C++20
1.75 / 100
15 ms6292 KiB
#include <bits/stdc++.h>

using namespace std;

namespace {
class dsu {
  int n;
  vector<int> par;

public:
  dsu(int n) : n(n), par(n) {
    iota(par.begin(), par.end(), 0);
  }

  int root(int u) { return u == par[u] ? u : par[u] = root(par[u]); }
  void merge(int u, int v) {
    u = root(u), v = root(v);
    if (u != v) {
      par[v] = u;
    }
  }
};
} // namespace

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
  vector<pair<pair<int, int>, int>> edges;
  for (int i = 0; i < M; ++i) {
    edges.push_back({{U[i], V[i]}, i});
  }
  auto idx = [&](int u, int v) {
    pair<pair<int, int>, int> p = {{u, v}, -1};
    auto it = lower_bound(edges.begin(), edges.end(), p);
    assert(it != edges.end());
    return it->second;
  };

  vector<vector<int>> adj(N);
  dsu dsu(N);
  for (int i = 0; i < M; ++i) {
    adj[U[i]].push_back(V[i]);
    if (U[i] != 0 && V[i] != 0) {
      dsu.merge(U[i], V[i]);
    }
  }

  for (int i = 0; i < int(adj[0].size()); ++i) {
    for (int j = i + 1; j < int(adj[0].size()); ++j) {
      if (dsu.root(adj[0][i]) == dsu.root(adj[0][j])) {
        return true;
      }
    }
  }
  return false;
}

#ifdef MACOS_LOCAL
#include "grader.cpp"
#endif
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...