Submission #1368318

#TimeUsernameProblemLanguageResultExecution timeMemory
1368318avighnaThousands Islands (IOI22_islands)C++20
1.75 / 100
125 ms23784 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;
  map<pair<int, int>, int> idx_mp, cnt_mp;
  for (int i = 0; i < M; ++i) {
    idx_mp[{U[i], V[i]}] = i;
    cnt_mp[{U[i], V[i]}]++;
  }

  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) {
    if (cnt_mp[{0, adj[0][i]}] > 1) {
      return true;
    }
  }

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