CP-templates

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Misuki743/CP-templates

:heavy_check_mark: graph/Kruskal.cpp

Verified with

Code

//#include "ds/DSU.cpp"

template<class T, bool sorted = false>
pair<T, vector<int>> Kruskal(vector<array<T, 3>> &e, int n) {
  vector<int> id(ssize(e));
  iota(id.begin(), id.end(), 0);
  if constexpr (!sorted)
    ranges::sort(id, {}, [&e](int i) { return e[i][2]; });

  T cost = 0;
  DSU dsu(n);
  vector<int> res;
  for(int i : id) {
    auto [u, v, w] = e[i];
    if (dsu.merge(u, v)) {
      cost += w;
      res.emplace_back(i);
    }
  }
  return make_pair(cost, res);
}
#line 1 "graph/Kruskal.cpp"
//#include "ds/DSU.cpp"

template<class T, bool sorted = false>
pair<T, vector<int>> Kruskal(vector<array<T, 3>> &e, int n) {
  vector<int> id(ssize(e));
  iota(id.begin(), id.end(), 0);
  if constexpr (!sorted)
    ranges::sort(id, {}, [&e](int i) { return e[i][2]; });

  T cost = 0;
  DSU dsu(n);
  vector<int> res;
  for(int i : id) {
    auto [u, v, w] = e[i];
    if (dsu.merge(u, v)) {
      cost += w;
      res.emplace_back(i);
    }
  }
  return make_pair(cost, res);
}
Back to top page