Submission #1320352

#TimeUsernameProblemLanguageResultExecution timeMemory
1320352madamadam3Thousands Islands (IOI22_islands)C++20
0 / 100
53 ms9368 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;
  for (int i = 0; i < m; i++) {
    ec[{U[i], V[i]}]++;

    adj[U[i]].push_back(i);
    adj[V[i]].push_back(i);
  }

  int timer = 0;
  vi tin(n, -1);
  set<int> vis; vis.insert(0);

  auto dfs = [&](auto &&self, int u) {
    tin[u] = timer++;
    for (auto e : adj[u]) {
      if (U[e] != u) continue;
      int v = V[e];

      if (vis.count(v)) {
        if (tin[u] > tin[v]) return true;
        else continue;
      }

      vis.insert(v);
      if (self(self, v)) {
        return true;
      }
    }

    return false;
  };

  return dfs(dfs, 0);
}
#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...