Submission #875476

#TimeUsernameProblemLanguageResultExecution timeMemory
875476LucaLucaMICC (CEOI16_icc)C++17
7 / 100
205 ms856 KiB
#include "icc.h"
#ifdef LOCAL
#include "grader.cpp"
#endif // LOCAL
#include <vector>
#include <iostream>
#include <cassert>
#include <algorithm>
#include <cstring>

const int NMAX = 100;

int p[NMAX + 1];

int root(int u) {
  if (p[u] == u) {
    return u;
  }
  return p[u] = root(p[u]);
}

void join(int u, int v) {
  u = root(u), v = root(v);
  p[u] = v;
}

int ask(std::vector<int> a, std::vector<int> b) {
  int sz_a = (int) a.size(), sz_b = (int) b.size();
  int A[sz_a], B[sz_b];
  for (int i = 0; i < sz_a; i++) {
    A[i] = a[i];
  }
  for (int i = 0; i < sz_b; i++) {
    B[i] = b[i];
  }
  return query(sz_a, sz_b, A, B);
}

void run(int n) {
  bool before[n + 1][n + 1];
  memset(before, false, sizeof(before));
  for (int i = 1; i <= n; i++) {
    p[i] = i;
  }
  for (int k = 1; k < n; k++) {
    bool ok = false;
    for (int i = 1; i < n && !ok; i++) {
      for (int j = i + 1; j <= n && !ok; j++) {
        if (!before[i][j] && root(i) != root(j)) {
          before[i][j] = ask({i}, {j});
          if (before[i][j]) {
            join(i, j);
            setRoad(i, j);
            ok = true;
          }
        }
      }
    }
  }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...