Submission #1368037

#TimeUsernameProblemLanguageResultExecution timeMemory
1368037mannshah1211Thousands Islands (IOI22_islands)C++20
0 / 100
15 ms4380 KiB
#include "islands.h"
#include <bits/stdc++.h>
#include <variant>
#include <vector>

using namespace std;

class dsu {
 public:
  vector<int> p;
  int n;

  dsu(int _n) : n(_n) {
    p.resize(n);
    iota(p.begin(), p.end(), 0);
  }

  int get(int x) {
    if (p[x] == x) {
      return x;
    }
    return (p[x] = get(p[x]));
  }

  bool unite(int x, int y) {
    x = get(x);
    y = get(y);
    if (x != y) {
      p[y] = x;
      return true;
    }
    return false;
  }
};

variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v) {
  vector<vector<int>> g(n);
  for (int i = 0; i < m; i += 2) {
    g[u[i]].push_back(v[i]);
  }
  bool cyc = false;
  vector<bool> vis(n);
  auto Dfs = [&](auto&& self, int v) -> void {
    vis[v] = true;
    for (int u : g[v]) {
      if (!vis[u]) {
        self(self, u);
      }
    }
  };
  Dfs(Dfs, 0);
  vector<vector<int>> gg(n);
  for (int i = 0; i < m; i++) {
    if (vis[u[i]] && vis[v[i]]) {
      gg[u[i]].push_back(v[i]);
    }
  }
  vector<int> ts;
  vector<int> indeg(n);
  queue<int> que;
  for (int i = 0; i < n; i++) {
    for (int u : gg[i]) {
      ++indeg[u];
    }
  }
  for (int i = 0; i < n; i++) {
    if (indeg[i] != 0) {
      que.push(i);
      ts.push_back(i);
    }
  }
  while (!que.empty()) {
    int v = que.front();
    que.pop();
    for (int u : gg[v]) {
      if (--indeg[u] == 0) {
        que.push(u);
        ts.push_back(u);
      }
    }
  }
  return (ts.size() != n);
}
#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...