src/cplib/graph/merge_tree

  Source   Edit

Types

MergeTree = object
  ein: seq[int]
  eout: seq[int]
  et: seq[int]
  ret: seq[int]
  tree: UnWeightedUnDirectedGraph
  uf: UnionFind
  now: seq[int]
  N: int
  alr_query: int
  v: seq[(int, int)]
  Source   Edit

Procs

proc get_id(self: var MergeTree; x: int): int {....raises: [], tags: [].}
xが現在の状態でどこの頂点で表される集合に属しているかを返す   Source   Edit
proc get_range(self: var MergeTree; x: int): HSlice[int, int] {....raises: [],
    tags: [].}
ある集合について、それに属している頂点を区間で返す   Source   Edit
proc index(self: var MergeTree; x: int): int {....raises: [], tags: [].}
オイラーツアー順でxは何番目かを返す   Source   Edit
proc initMergeTree(N: int; v: seq[(int, int)]): MergeTree {....raises: [], tags: [].}
クエリを前読みする必要があるので、頂点数とマージを配列で与える   Source   Edit
proc make_seq[T](self: var MergeTree; v: seq[T]): seq[T]
オイラーツアー順に配列を並び替える   Source   Edit
proc restore_seq[T](self: var MergeTree; v: seq[T]): seq[T]
オイラーツアー順になっている配列をもとに戻す   Source   Edit
proc unite(self: var MergeTree; u, v: int) {....raises: [], tags: [].}
頂点u,vをマージする 先読みで与えた順番にuniteしてください   Source   Edit