Submission #1230426

#TimeUsernameProblemLanguageResultExecution timeMemory
1230426madamadam3Rarest Insects (IOI22_insects)C++20
10 / 100
99 ms412 KiB
#include "insects.h"
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;

struct DSU {
  int n; vi par, siz;

  DSU(int N) {
    n = N;
    par.resize(n); iota(par.begin(), par.end(), 0);
    siz.assign(n, 1);
  }

  int find(int v) {
    if (par[v] == v) return v;
    return par[v] = find(par[v]);
  }

  void unite(int a, int b) {
    a = find(a);
    b = find(b);

    if (a != b) {
      if (siz[a] < siz[b]) swap(a, b);
      par[b] = a;
      siz[a] += siz[b];
    }
  }
};

int min_cardinality(int N) {
  int n = N;
  auto dsu = DSU(n);

  for (int i = 0; i < n; i++) {
    if (dsu.find(i) != i) continue;

    move_inside(i);
    for (int j = i+1; j < n; j++) {
      if (dsu.find(j) != j) continue;
      move_inside(j);
      if (press_button() > 1) dsu.unite(i, j);
      move_outside(j);
    }
    move_outside(i);
  }

  return dsu.siz[*min_element(dsu.par.begin(), dsu.par.end(), [&](int a, int b) {
    return dsu.siz[dsu.find(a)] < dsu.siz[dsu.find(b)];
  })];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...