kyopro-lib

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

View on GitHub

:warning: Check bipartite graph (Using union-find)
(Mylib/Graph/BipartiteGraph/construct_bipartite_graph.cpp)

Operations

Requirements

Notes

Problems

References

Code

#pragma once

namespace haar_lib {
  template <typename UF>
  class bipartite_graph : public UF {
    int n_;

    using super = UF;

  public:
    bipartite_graph() {}
    bipartite_graph(int n) : super(2 * n), n_(n) {}

    void add_diff(int i, int j) {  // iとjを異なる色で塗る。
      super::merge(i, j + n_);
      super::merge(i + n_, j);
    }

    void add_same(int i, int j) {  // iとjを同じ色で塗る。 = iとjを同じ頂点と見做す。
      super::merge(i, j);
      super::merge(i + n_, j + n_);
    }

    bool is_bipartite_graph(int i) {  // iを含む連結グラフが二部グラフかを判定する。
      return not super::is_same(i, i + n_);
    }

    bool is_same(int i, int j) {  // iとjが同じ色で塗られているか判定する。
      return super::is_same(i, j);
    }
  };
}  // namespace haar_lib
#line 2 "Mylib/Graph/BipartiteGraph/construct_bipartite_graph.cpp"

namespace haar_lib {
  template <typename UF>
  class bipartite_graph : public UF {
    int n_;

    using super = UF;

  public:
    bipartite_graph() {}
    bipartite_graph(int n) : super(2 * n), n_(n) {}

    void add_diff(int i, int j) {  // iとjを異なる色で塗る。
      super::merge(i, j + n_);
      super::merge(i + n_, j);
    }

    void add_same(int i, int j) {  // iとjを同じ色で塗る。 = iとjを同じ頂点と見做す。
      super::merge(i, j);
      super::merge(i + n_, j + n_);
    }

    bool is_bipartite_graph(int i) {  // iを含む連結グラフが二部グラフかを判定する。
      return not super::is_same(i, i + n_);
    }

    bool is_same(int i, int j) {  // iとjが同じ色で塗られているか判定する。
      return super::is_same(i, j);
    }
  };
}  // namespace haar_lib
Back to top page