Submission #1361865

#TimeUsernameProblemLanguageResultExecution timeMemory
1361865avighnaMulti Communication 2 (JOI26_multi)C++20
0 / 100
30 ms2044 KiB
#include <bits/stdc++.h>

using namespace std;

using u64 = unsigned long long;

namespace {

const int N = 256;
const int64_t inf = 1e15;

vector dist(N, vector<u64>(N, inf));

class Dsu {
  int n;
  vector<int> par;

public:
  Dsu() {}
  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;
    }
  }
};

Dsu dsu;

} // namespace

vector<u64> strategy(int n, int r, int i, vector<u64> a, vector<u64> b) {
  if (dist[0][0] == inf) {
    dsu = Dsu(n);
    dist[0][0] = 0;
  }
  if (r < n) {
    for (int j = 0; j < n; ++j) {
      dist[i][j] = a[j];
    }
    return vector<u64>(n, 0);
  }

  vector<pair<u64, pair<int, int>>> edges;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < i; ++j) {
      edges.push_back({dist[i][j], {i, j}});
    }
  }
  sort(edges.begin(), edges.end());
  u64 mst_wt = 0;
  for (auto &[wt, p] : edges) {
    auto [u, v] = p;
    if (dsu.root(u) == dsu.root(v)) {
      continue;
    }
    mst_wt += wt;
    dsu.merge(u, v);
  }
  dist[0][0] = inf;
  return {mst_wt};
}
#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...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...