# ã¯ã©ã¹ DSU
- - -
ç¡åã°ã©ãã«å¯¾ãã¦,
* 辺ã®è¿½å
* 2 é ç¹ãé£çµãã®å¤å®
ã $O(α(N))$ æéã§å¦çãããã¨ãåºæ¥ã¾ãã
ã¾ããå
é¨çã«åé£çµæåãã¨ã«ä»£è¡¨ã¨ãªãé ç¹ã 11 ã¤æã£ã¦ãã¾ãã辺ã®è¿½å ã«ããé£çµæåããã¼ã¸ãããæãæ°ããªä»£è¡¨å
ã¯å
ã®é£çµæåã®ä»£è¡¨å
ã®ãã¡ã©ã¡ããã«ãªãã¾ãã
## ã³ã³ã¹ãã©ã¯ã¿
### DSU
```java
public DSU(int n){
```
* $n$é ç¹$0$辺ã®ç¡åã°ã©ããä½ãã¾ãã
å¶ç´
é ç¹æ° $n$ ã®é
å $a_0, a_1, \dots, a_{n-1}$ãä½ãã¾ã.
åæå¤ã¯ãã¹ã¦-1ã§ã.
(C++çã ã¨10^8ã¾ã§å¯è½ã¨æ¸ãã¦ããã¾ãããJavaã ã¨å³ããããããã¾ãã)
è¨ç®é: $O(n)$
## ã¡ã½ãã
### merge
```java
int merge(int a, int b)
```
辺$(a,b)$ãè¶³ãã¾ãã
$a,b$ ãé£çµã ã£ãå ´åã¯ãã®ä»£è¡¨å
ãéé£çµã ã£ãå ´åã¯æ°ããªä»£è¡¨å
ãè¿ãã¾ãã(indexå¤ã®æ°åãå
¥ããå ´åã¯-1ãè¿ãã¾ãã)
**å¶ç´**
* 0 \leq a < n
* 0 \leq b < n
**è¨ç®é**
* ãªãã$O(α(n))$
### same
```java
boolean same(int a, int b){
```
é ç¹$a,b$ãé£çµãã©ãããè¿ãã¾ãã
**å¶ç´**
* 0 \leq a < n
* 0 \leq b < n
**è¨ç®é**
* ãªãã$O(α(n))$
### leader
```java
int leader(int a){
```
é ç¹$a$ã®å±ããé£çµæåã®ä»£è¡¨å
ãè¿ãã¾ãã
**å¶ç´**
* 0 \leq a < n
**è¨ç®é**
* ãªãã$O(α(n))$
### size
```java
int size(int a) {
```
é ç¹$a$ã®å±ããé£çµæåã®ãµã¤ãºãè¿ãã¾ãã
**å¶ç´**
* 0 \leq a < n
**è¨ç®é**
* ãªãã$O(α(n))$
### groups
```java
ArrayList