---
id: dsu
title: "Disjoint Set Union"
author: Benjamin Qi, Michael Cao 
prerequisites:
 - Silver - Depth First Search
description: The Disjoint Set Union (DSU) data structure allows you to add edges to an initially empty graph and test whether two vertices of the graph are connected.
frequency: 3
---

import { Problem } from "../models";

export const metadata = {
  problems: {
    sample: [
      new Problem("YS", "Union Find", "unionfind", "Easy", false, []),
    ],
    general: [
      new Problem("Gold", "Mootube", "789", "Easy", false, [], "same as [CSES Road Construction](https://cses.fi/problemset/task/1676)"),
      new Problem("Gold", "Closing the Farm", "646", "Easy", false, [], "similar to [CSES Network Breakdown](https://cses.fi/problemset/task/1677)"),
      new Problem("Gold", "Favorite Colors", "1042", "Hard", false, [], ""),
    ],
    rollback: [
      new Problem("YS", "Persistent Union Find", "persistent_unionfind", "Normal", false, [], ""),
      new Problem("YS", "Vertex Add Component Sum", "dynamic_graph_vertex_add_component_sum", "Hard", false, [], ""),
      new Problem("CF", "Edu F - Extending Set of Points", "contest/1140/problem/F", "Hard", false, [], ""),
    ],
  }
};

<problems-list problems={metadata.problems.sample} />

## Tutorial

<resources>
  <resource source="CPH" title="15.2 - Union-find"></resource>
  <resource source="PAPS" title="11.1"></resource>
  <resource source="IUSACO" title="10.6"></resource>
  <resource source="CSA" title="Disjoint Data Sets" url="disjoint_data_sets"></resource>
  <resource source="TC" title="Disjoint Set Data Structures" url="disjoint-set-data-structures"></resource>
  <resource source="CPC" title="3 - Data Structures" url="03_data_structures"></resource>
</resources>

<optional-content title="DSU Complexity Proofs">

   - [$\log^* n$](https://en.wikipedia.org/wiki/Proof_of_O(log*n)\_time_complexity\_of_union%E2%80%93find)
   - [$\alpha (m,n)$](https://dl.acm.org/doi/pdf/10.1145/321879.321884)

</optional-content>

## Problems

<problems-list problems={metadata.problems.general} />

## Rollback

no path compression

<problems-list problems={metadata.problems.rollback} />
